05. april 2005 - 20:37
Der er
7 kommentarer
Fange enter-key i fra en edit control
Mit interface består af en dialogbox, som jeg har lavet i en resource editor. Når WinMain kaldes starter viser jeg blot boksen.
<code>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_WINMATHCALC), NULL, MathCalcDlgProc);
return 1;
}
</code>
Men hvordan fanger jeg enter keyen i fra en edit control på min dialogboks? WM_KEYDOWN virker åbenlyst ikke - HJÆLP :D
På forhånd tak
WOFD
06. april 2005 - 01:01
#3
Nå, det var ikke så let.
Et "lille" program der virker:
#include <windows.h>
HINSTANCE InstanceHandle;
LRESULT (CALLBACK *OldEditProc )(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK EditProc(HWND HwndEdit, UINT msg, WPARAM wParam, LPARAM lParam)
{
if(msg == WM_KEYDOWN)
{
if(wParam == VK_RETURN)
{
MessageBox(HwndEdit, "Got it", "Whatever", MB_OK);
return 0;
}
}
return CallWindowProc(OldEditProc, HwndEdit, msg, wParam, lParam);
}
bool Done = false;
BOOL CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_INITDIALOG:
HWND Edit;
Edit = GetDlgItem(hwndDlg, 140);
OldEditProc = (WNDPROC )GetWindowLong(Edit, GWL_WNDPROC);
SetWindowLong(Edit, GWL_WNDPROC, (LONG )EditProc);
return TRUE;
case WM_CLOSE:
EndDialog(hwndDlg, 0);
Done = true;
return TRUE;
}
return FALSE;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
HWND WindowHandle = CreateDialog(hInstance, MAKEINTRESOURCE(130), 0, DialogProc);
ShowWindow(WindowHandle, SW_SHOW);
MSG Msg;
while(!Done && GetMessage(&Msg, WindowHandle, 0, 0xFFFF) > 0)
{
if((Msg.message == WM_KEYDOWN && Msg.wParam == VK_RETURN) || !IsDialogMessage(WindowHandle, &Msg))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}
return 1;
}
Edit controllen hedder 140, dialogbox templaten har id 130.
Normalt fanger jeg Enter med en default button.
06. april 2005 - 07:20
#4
Want return virkede ikke :(
Men mange tak bertelbrander, har ledt hele internettet igennem efter det svar. Poster du ikke lige en svar :D