Форум: "WinAPI";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизВведение новой оконной процедуры Найти похожие ветки
← →
Serega_____ (2004-03-04 11:15) [0]Есть простое окошко, сделанное на API и поле ввода на нем, нужно
ввести отдельную оконную процедуру для этого поля ввода...,чтобы, например обработать нажатие Enter"a в нем.
Использую след. код,прога вылетае с ошибкой времени выполнения(run time), может кто поможет или предложит др. способ...,заранее спасибо.
program Test;
uses Windows, Messages;
var
wc: TWndClassEx;
Mes: TMsg;
MainWnd, EditWnd: HWND;
PrevProc: LongInt;
function MainWndProc(Wnd: HWND; Msg: Cardinal; WP: WParam; LP: LParam): LResult; stdcall;
Begin
case Msg of
WM_DESTROY:
begin
PostQuitMessage(0);
Result:= 0;
end;
else Result:= DefWindowProc(Wnd, Msg, WP, LP);
end;
End;
function EditWndProc(Wnd: HWND; Msg: Cardinal; WP: WParam; LP: LParam): LResult; stdcall;
Begin
case Msg of
WM_KEYDOWN:
begin
if WP = VK_RETURN then MessageBox(0, "Тест", "Тест", 0);
Result:= 0;
end;
else Result:= CallWindowProc(@PrevProc, Wnd, Msg, WP, LP);
end;
End;
BEGIN // Тело программы
wc.cbSize:= sizeof(wc);
wc.style:= CS_HREDRAW or CS_VREDRAW;
wc.lpfnWndProc:= @MainWndProc;
wc.cbClsExtra:= 0;
wc.cbWndExtra:= 0;
wc.hInstance:= HInstance;
wc.hIcon:= LoadIcon(0, IDI_APPLICATION);
wc.hCursor:= LoadCursor(0, IDC_ARROW);
wc.hbrBackground:= COLOR_BTNFACE+1;
wc.lpszMenuName:= nil;
wc.lpszClassName:= "TestClass";
RegisterClassEx(wc);
MainWnd:= CreateWindowEx (0, "TestClass", "Test", WS_OVERLAPPEDWINDOW or WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, Hinstance, nil);
EditWnd:= CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", nil,
WS_CHILD or WS_VISIBLE ,
10, 10, 100, 20, MainWnd, 0, 0, nil);
PrevProc:= SetWindowLong(EditWnd, GWL_WNDPROC, LongInt(@EditWndProc));
while GetMessage(Mes, 0, 0, 0) do
begin
TranslateMessage(Mes);
DispatchMessage(Mes);
end;
END.
← →
YuRock © (2004-03-04 11:24) [1]Главная ошибка в приведенном коде: в строке
else Result:= CallWindowProc(@PrevProc, Wnd, Msg, WP, LP);
надо убрать собаку перед PrevProc (можно написать вместо этого Pointer(PrevProc));
← →
Serega_____ (2004-03-04 11:48) [2]ага, спасибо, все номально
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.057 c