我在用win32 api写程序。
我自己实现了一个窗口类。
此窗口类的功能类似于edit控件。
当拥有Focus的时候,能够接收键盘输入,并显示光标(Caret)。现在的问题是,这个窗口类,如果是用在主界面frame中,是可以正常工作的。但是,如果用在对话框中,即做为对话框的子窗口,就接收不到WM_CHAR消息了。
另外,用在对话框中,光标(Caret)的闪烁是正常的。
即单击窗口内部,光标(Caret)就会闪烁。
单击同一对话框内其他edit控件内部,光标(Caret)就会消失。
麻烦大家指导一下。多谢!部分代码如下:
case WM_LBUTTONDOWN:
{
if (GetFocus()!=hwnd)
{
SetFocus(hwnd);
}
else
{ SetCaretPos((pt.x/cxChar)*cxChar, (pt.y/cyChar)*cyChar);
}
return 0;
}case WM_SETFOCUS:
{
CreateCaret(hwnd, NULL, cxChar, cyChar);
SetCaretPos((pt.x/cxChar)*cxChar, (pt.y/cyChar)*cyChar);
ShowCaret(hwnd);
return 0 ;
}case WM_KILLFOCUS:
{
HideCaret(hwnd);
DestroyCaret();
return 0 ;
}对话框控件界面
我自己实现了一个窗口类。
此窗口类的功能类似于edit控件。
当拥有Focus的时候,能够接收键盘输入,并显示光标(Caret)。现在的问题是,这个窗口类,如果是用在主界面frame中,是可以正常工作的。但是,如果用在对话框中,即做为对话框的子窗口,就接收不到WM_CHAR消息了。
另外,用在对话框中,光标(Caret)的闪烁是正常的。
即单击窗口内部,光标(Caret)就会闪烁。
单击同一对话框内其他edit控件内部,光标(Caret)就会消失。
麻烦大家指导一下。多谢!部分代码如下:
case WM_LBUTTONDOWN:
{
if (GetFocus()!=hwnd)
{
SetFocus(hwnd);
}
else
{ SetCaretPos((pt.x/cxChar)*cxChar, (pt.y/cyChar)*cyChar);
}
return 0;
}case WM_SETFOCUS:
{
CreateCaret(hwnd, NULL, cxChar, cyChar);
SetCaretPos((pt.x/cxChar)*cxChar, (pt.y/cyChar)*cyChar);
ShowCaret(hwnd);
return 0 ;
}case WM_KILLFOCUS:
{
HideCaret(hwnd);
DestroyCaret();
return 0 ;
}对话框控件界面
如下网址给出了解决方法.
http://social.msdn.microsoft.com/Forums/vstudio/en-US/3f7766c1-9352-47f5-963f-137f20acf4cc/win32-modal-dialog-box在自定义的窗口类中,增加如下消息处理代码即可.case WM_GETDLGCODE:
if(lParam)
{
LPMSG lpmsg = (LPMSG)lParam;
if( lpmsg->message == WM_CHAR)
{
return DLGC_WANTCHARS;
}
}
return 0;