许久没用Win了,生疏了很多。记些笔记:
- 让Dialog中能接收 WM_CHAR,及按键时不要“咚咚”声
- 在某窗体中禁用输入法:(标准 Windowz GUI 中控件也是窗体)
处理 WM_INPUTLANGCHANGEREQUEST 并 return 0; - 自绘输入光标
WM_SETFOCUS:
// 注:这里我开始用this->CreateCaret(NULL),发现只有个小黑点,所以用可以定义大小的。
::CreateCaret(this->m_hWnd, NULL, 2, 25);//(HBITMAP)1是灰块,NULL是黑块,也可以定制BMP
::SetCaretPos(50,15); // 设置光标位置
this->ShowCaret();
WM_KILLFOCUS:
this->HideCaret();
::DestroyCaret(); - 动态设置光标位置
结合如下API:(注意:DC的字体)SIZE size; // 字串高度、宽度
GetTextExtentexPoint32(hdc, str, strlen, &size); - 限制窗口显示的大小
(注:该消息为Win发送处理,用户只需设置其值就行了,只设置需要的其它的交给系统调整)WM_GETMINMAXINFO:
// 窗口最小能调整到的大小
lpMinMaxInfo->ptMinTrackSize.x = 640;
lpMinMaxInfo->ptMinTrackSize.y = 480;
// 窗口最大能调整到的大小
lpMinMaxInfo->ptMaxTrackSize.x = 800;
lpMinMaxInfo->ptMaxTrackSize.y = 600;
// 最大化窗口时的大小
lpMinMaxInfo->ptMaxSize.x = 800;
lpMinMaxInfo->ptMaxSize.y = 600;
// 最大化窗口时的位置
lpMinMaxInfo->ptMaxPosition.x = 50;
lpMinMaxInfo->ptMaxPosition.y = 60;
return 0; // 自己处理后要 return 0;
在 Dialog::PreTranslateMessage(MSG* pMsg) 中让Dialog跳过WM_CHAR的处理(return FALSE):
if (pMsg->message == WM_KEYDOWN
|| pMsg->message == WM_KEYUP
|| pMsg->message == WM_CHAR)
return FALSE; // 解决按键时的“咚咚”声,及让Dialog中能接收 WM_CHAR
//(Dialog 的回车自动 OK,ESC 自动 CANCEL 也可以用这种方式解决)
//EOF
0 comments:
Post a Comment