Пожалуста помогите!!! Нужно создать главное окно с уникальным классом для FindWindow(DIALOG_UNICUM_CLASS, nil); из ресурса диалога. Пока не вижу другого выхода как писать runtime окно, которое никогда не видно, а только обрабатывает сообщения. А окна с ресурсов делать дочрними. Использую MinGW Developer Studio 2.05 () При приведенном ниже коде прога запускается, а окно не видно. res.rc:
| Код | 1000 DIALOGEX 6,6,194,102 CAPTION "FORM" CLASS "WWWWWESSFFFSF" FONT 8,"MS Sans Serif" STYLE 0x10CF0000 EXSTYLE 0x00000000 BEGIN CONTROL "BOTTON",1001,"Button",0x50010000,38,16,114,63,0x00000000 END
|
prj.cpp:
| Код | #include <windows.h>
BOOL CALLBACK MainDlgProc( HWND wnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_DESTROY : PostQuitMessage(0); return TRUE; break; case WM_SYSCOMMAND: if (wParam == SC_CLOSE) { EndDialog(wnd, 0); PostQuitMessage(0); return TRUE; } break; } return FALSE; }
LRESULT CALLBACK WindowProc(HWND wnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch( msg ) { case WM_DESTROY : PostQuitMessage(0); return 1; break; } return DefWindowProc(wnd,msg,wParam,lParam); }
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; HWND MainWnd; WNDCLASSEXA wc; wc.cbSize=sizeof(WNDCLASSEXA); wc.style=CS_HREDRAW or 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="WWWWWESSFFFSF"; /**/ RegisterClassEx(&wc); MainWnd=CreateDialog(hInstance, MAKEINTRESOURCE(1000), 0, NULL); ShowWindow(MainWnd, SW_SHOW ); /* 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 0; }
|
А вот так работет, НО БЕЗ КЛАССА:
| Код | ---res.rc--- ... CAPTION "FORM" /* CLASS "WWWWWESSFFFSF" */ FONT 8,"MS Sans Serif" ...
---prj.cpp--- ... /* RegisterClassEx(&wc); MainWnd=CreateDialog(hInstance, MAKEINTRESOURCE(1000), 0, NULL); ShowWindow(MainWnd, SW_SHOW ); */ MainWnd=CreateDialog(hInstance, MAKEINTRESOURCE(1000), 0, MainDlgProc); ShowWindow(MainWnd, SW_SHOW ); ...
|
И что самое интересное этот код работает как надо (окно видно):
| Код | program Project1;
{$R '..\res.res' '..\res.rc'}
uses windows, messages;
function WindowProc(wnd:HWND; Msg : UINT; wParam: WPARAM; lParam: LPARAM):LRESULT; stdcall; begin case msg of WM_DESTROY : begin PostQuitMessage(0); end; else Result:=DefWindowProcW(wnd,msg,wParam,lParam); end; end;
var wc: tagWNDCLASSEXA; MainWnd: HWND; msg: tagMSG; begin
wc.cbSize:=sizeof(tagWNDCLASSEXA); wc.style:=CS_HREDRAW or CS_VREDRAW; wc.lpfnWndProc:=@WindowProc; wc.cbClsExtra:=0; wc.cbWndExtra:=DLGWINDOWEXTRA; wc.hInstance:=HInstance; wc.hIcon:=LoadIcon(0, IDI_QUESTION); wc.hCursor:=LoadCursor(0,IDC_ARROW); wc.hbrBackground:=COLOR_BTNFACE+1; wc.lpszMenuName:= ''; wc.lpszClassName:='WWWWWESSFFFSF'; RegisterClassEx(wc); MainWnd:=CreateDialog(HInstance, MAKEINTRESOURCE(1000), 0, nil); ShowWindow(MainWnd, SW_SHOW );
while GetMessage(msg,0,0,0) do begin if mainWnd<>0 then if IsDialogMessage(mainWnd,msg) then continue; TranslateMessage(msg); DispatchMessage(msg); end; end.
|
|