Цитата(Fin @ 21.6.2006, 21:48 ) | | Пусто это значит вообше не определен обработчик? |
главное DefwindowProc вызвать. Всегда срабатывало
Цитата(Fin @ 21.6.2006, 21:48 ) | | Какой тип у переменной AppName? Это должна быть нуль терминальная строка |
Константа всегда прокатывала. Делфа сама конвертирует. Здается мне не там мы ищем...
GePo, проверь с GetModuleHandle все-таки. И в регистрации класса, и в создании окна
Добавлено @ 08:12 Что-то ты не договариваешь. Я дополнил твой код стандартным и все работает. В общем у меня так:
| Код | program prog; uses windows,messages; procedure CreateWnd;external 'lib.dll'; var msg:TMSG; begin CreateWnd; while GetMessage(msg,0,0,0) do begin TranslateMessage(msg); DispatchMessage(msg); end;
end.
|
| Код | library lib;
uses windows, messages; const AppName='MyCoolApp';caption=AppName;width=300;height=300;
function WindowProc(wnd:HWND;msg:DWORD;wParam,lParam:integer):LRESULT;stdcall; begin if msg=WM_CLOSE then PostQuitMessage(0) else result:=DefWindowProc(wnd,msg,wparam,lparam); end;
procedure CreateWnd; var WindowClass:WNDCLASS;window:HWND; begin with WindowClass do begin Style := CS_HREDRAW or CS_VREDRAW; lpfnWndProc := @WindowProc; cbClsExtra := 0; cbWndExtra := 0; hInstance := GetModuleHandle(nil); hIcon := LoadIcon (0, idi_Application); hCursor := LoadCursor (0, idc_Arrow); hbrBackground := GetStockObject (White_Brush); lpszMenuName := ''; lpszClassName := AppName; end;
if RegisterClass(WindowClass) = 0 then exit;
Window := CreateWindow(AppName, Caption, WS_OVERLAPPEDWINDOW or WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, Width, Height, 0, 0, GetModuleHandle(nil), nil); end;
exports CreateWnd; begin end.
|
|