INT_PTR CALLBACK DialogProc(
_In_ HWND hwndDlg,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
)
{
switch(uMsg)
{
case WM_INITDIALOG:
SetWindowLong(hwndDlg,GWL_WNDPROC,(LONG)EditProc); return TRUE;
break;
case WM_CLOSE:
DestroyWindow(hwndDlg);
return TRUE;
break;
case WM_COMMAND: if( (LOWORD(wParam)==IDOK) || (LOWORD(wParam)==IDCANCEL) )
{ DestroyWindow(hwndDlg);
return TRUE;
} break; case WM_DESTROY:
PostQuitMessage(0);
return TRUE;
default:
return FALSE;
}
return FALSE;
}INT_PTR CALLBACK EditProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch(msg)
{
case WM_CHAR: {
WORD nCode=LOWORD(wp);
if( (nCode>='0') && (nCode<='9'))
{
//这里如何处理??
return DefWindowProc(hwnd,msg,wp,lp);
}
}
break; default:
return DefWindowProc(hwnd,msg,wp,lp); }
return DefWindowProc(hwnd,msg,wp,lp);
}
目标: 限制对话框上的编辑框的字符输入,只运行输入数字。结果:俺发现,关闭对话框的时候, wm_close似乎没有相应。也就说, 子类化操作似乎无法让 对话框的窗口函数正常工作了。
_In_ HWND hwndDlg,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
)
{
switch(uMsg)
{
case WM_INITDIALOG:
SetWindowLong(hwndDlg,GWL_WNDPROC,(LONG)EditProc); return TRUE;
break;
case WM_CLOSE:
DestroyWindow(hwndDlg);
return TRUE;
break;
case WM_COMMAND: if( (LOWORD(wParam)==IDOK) || (LOWORD(wParam)==IDCANCEL) )
{ DestroyWindow(hwndDlg);
return TRUE;
} break; case WM_DESTROY:
PostQuitMessage(0);
return TRUE;
default:
return FALSE;
}
return FALSE;
}INT_PTR CALLBACK EditProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch(msg)
{
case WM_CHAR: {
WORD nCode=LOWORD(wp);
if( (nCode>='0') && (nCode<='9'))
{
//这里如何处理??
return DefWindowProc(hwnd,msg,wp,lp);
}
}
break; default:
return DefWindowProc(hwnd,msg,wp,lp); }
return DefWindowProc(hwnd,msg,wp,lp);
}
目标: 限制对话框上的编辑框的字符输入,只运行输入数字。结果:俺发现,关闭对话框的时候, wm_close似乎没有相应。也就说, 子类化操作似乎无法让 对话框的窗口函数正常工作了。
但是编辑框不能够输入了。另外:程序启动的时候,竟然处于最小化状态。奇葩啊, 最小化状态都出现了。
INT_PTR CALLBACK EditProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch(msg)
{
case WM_CHAR: {
WORD nCode=LOWORD(wp);
if( (nCode>='0') && (nCode<='9'))
{
//这里如何处理??
return DefWindowProc(hwnd,msg,wp,lp);
}
}
break; default:
return CallWindowProc((WNDPROC)oldWndProc,hwnd,msg,wp,lp); }
return CallWindowProc((WNDPROC)oldWndProc,hwnd,msg,wp,lp);
}
改成这个, 可以输入文字了,但是限制不住啊。什么情况???
EndDialog(hwndDlg,FALSE);if(!( (nCode>='0') && (nCode<='9'))) {
return 0;
}还有subclass要CallWindowProc()将消息传到上级的,有一个消息链的概念,不是DefWindowProc.