-
вот код
program Project1;
uses Windows, Messages;
const WndClass = 'TWinApiWnd'; WndCaption = 'API';
var Wc: TWndClassEx; Wnd: HWND; Msg: TMsg;
function WindowProc( Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM ): LRESULT; stdcall; begin case Msg of WM_DESTROY: begin PostQuitMessage( 0 ); Result := 0; Exit; end; WM_LBUTTONDBLCLK: MessageBox(wnd, 'Dbl click!', 'worked', MB_OK); else Result := DefWindowProc( Wnd, Msg, wParam, lParam ); end; end;
begin
with Wc do begin cbSize := SizeOf( Wc ); style := CS_HREDRAW or CS_VREDRAW; lpfnWndProc := @WindowProc; cbClsExtra := 0; cbWndExtra := 0; hInstance := hInstance; hIcon := LoadIcon( 0, IDI_APPLICATION ); hCursor := LoadCursor( 0, IDC_ARROW ); hbrBackground := CreateSolidBrush($000000); lpszMenuName := nil; lpszClassName := WndClass; end;
RegisterClassEx( Wc ); Wnd := CreateWindowEx( 0, WndClass, WndCaption, WS_OVERLAPPEDWINDOW, 100, 100, 300, 100, 0, 0, hInstance, nil );
ShowWindow( Wnd, SW_SHOWNORMAL );
while GetMessage( Msg, 0, 0, 0 ) do begin TranslateMessage( Msg ); DispatchMessage( Msg ); end; Halt( Msg.wParam ); end.
-
with Wc do begin cbSize := SizeOf(Wc); style := CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS; ... hInstance := hInstance; // ???!!! Что за чудесатости чудесатые? // Используйте GetModuleHandle(nil) или SysInit.HInstance; ... end;
И еще: при WM_LBUTTONDBLCLK оконная функция возвращает мусор - а не доолжна. На предупреждения компилятора стоит обращать внимание.
|