Была недавно моя тема по зтому поводу воспользуйся поиском там про главные окна из ресурсов с классом и без класов. Если без класса надо в ресурсе удалить строку например CLASS "MY_EXCLUSIVE_CLASS" Во вторых мой компилятор С требует полного заполнения WNDCLASSEX. Но на всякий случай повторюсь: res.rc:
| Код | #include "apptype.h" 1000 DIALOGEX 6,6,194,102 CAPTION "FORM" FONT 8,"MS Sans Serif",0,0 #ifdef MAIN_CLASS CLASS "MY_EXCLUSIVE_CLASS" #endif STYLE 0x10CF0000 BEGIN CONTROL "Cld Wnd",1001,"Button",0x50010000,38,16,114,63 END 2000 DIALOGEX 0,0,239,87 CAPTION "CLD FORM" FONT 8,"MS Sans Serif",0,0 STYLE 0xD0CF0040 BEGIN CONTROL "Get Cld",2001,"Button",0x50010F01,74,32,50,14 END
|
apptype.h:
main.c:
| Код | #include <windows.h>
#include "apptype.h"
BOOL CALLBACK ChDlgProc( HWND wnd, UINT msg, WPARAM wParam, LPARAM lParam ) { static HWND hWndPrnt; switch( msg ) { case WM_DESTROY : //PostQuitMessage(0); return TRUE; break; case WM_CLOSE://WM_SYSCOMMAND: //if (wParam == SC_CLOSE) { EndDialog(wnd, 0); return TRUE; } break; case WM_COMMAND: if (LOWORD(wParam) == 2001) { SetWindowText (GetParent((HWND) lParam), __TEXT("Caption: Child")); hWndPrnt = GetParent (wnd); SetWindowText (hWndPrnt, __TEXT("Caption: GetParent")); return TRUE; } break; } return FALSE; }
/* int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; HWND MainWnd; MainWnd=CreateDialog(hInstance, MAKEINTRESOURCE(1000), 0, MainDlgProc); ShowWindow(MainWnd, SW_SHOW ); while (GetMessage(&msg,0,0,0) ) { if (MainWnd!=0) { if (IsDialogMessage(MainWnd, &msg)) {continue;} } TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } */
#ifdef MAIN_CLASS LRESULT CALLBACK WindowProc(HWND wnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch( msg ) { case WM_DESTROY : PostQuitMessage(0); return 0; break; case WM_COMMAND: if (LOWORD(wParam) == 1001) { DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(2000), wnd, ChDlgProc); return 0; } break; } return DefWindowProc(wnd,msg,wParam,lParam); } #else BOOL CALLBACK MainDlgProc( HWND wnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_DESTROY : PostQuitMessage(0); return TRUE; break; case WM_CLOSE://WM_SYSCOMMAND: //if (wParam == SC_CLOSE) { //EndDialog(wnd, 0); //PostQuitMessage(0); DestroyWindow(wnd); return TRUE; } break; case WM_COMMAND: if (LOWORD(wParam) == 1001) { DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(2000), wnd, ChDlgProc); return TRUE; } break; } return FALSE; } #endif int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; HWND MainWnd; #ifdef MAIN_CLASS WNDCLASSEXA wc; wc.cbSize = sizeof(WNDCLASSEXA); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WindowProc; wc.cbClsExtra = 0; wc.cbWndExtra = DLGWINDOWEXTRA; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_QUESTION); wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1); wc.lpszMenuName = NULL; wc.lpszClassName = "MY_EXCLUSIVE_CLASS"; wc.hIconSm = NULL; RegisterClassEx(&wc); MainWnd=CreateDialog(hInstance, MAKEINTRESOURCE(1000), 0, NULL); #else MainWnd=CreateDialog(hInstance, MAKEINTRESOURCE(1000), 0, MainDlgProc); #endif ShowWindow(MainWnd, SW_SHOW ); while (GetMessage(&msg,0,0,0) ) { if (MainWnd!=0 ) { if (IsDialogMessage(MainWnd, &msg)) {continue;} } TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
|
Добавлено @ 23:20 Кстати
Цитата(neosapient @ 31.10.2006, 18:04 ) | // подключаем нестандартные контролы #include <commctrl.h> #pragma comment(lib,"comctl32.lib") |
и InitCommonControls (); забывать не надо, малоли что...
|