我有一个编辑,当用户按下SHIFT并且没有按下SHIFT中的大写时,我想让caracter小写(所以与当前行为相反)。
我做了以下代码,但我在堆栈上如何用按下的键更新Edit。
有什么帮助吗?
这是我的windowProc的一部分
case WM_CHAR:
{
if (HIWORD(wParam) == EN_UPDATE)
{
if (ED_FLT_CODE == LOWORD(wParam))
{
if ((GetKeyState(VK_SHIFT) & 0x8000) == 0x8000)
{
MessageBox(0, "shift", "", 0);
}
}
}
}
答案 0 :(得分:0)
如果我们想要修改标准编辑控件的行为 - 我们需要的全部 - 将窗口过程子类化为WM_CHAR
消息,替换wParam
(密钥的字符代码)在调用默认窗口程序进行编辑之前,使用大写(反转)。我们不需要任何GetKeyState
或EN_UPDATE
例如:
LRESULT CALLBACK SubEditWindowProc(HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam,
UINT_PTR uIdSubclass,
DWORD_PTR /*dwRefData*/
)
{
switch (uMsg)
{
case WM_CHAR:
if (IsCharLowerW((WCHAR)wParam))
{
CharUpperBuffW((PWSTR)&wParam, 1);
}
else if (IsCharUpperW((WCHAR)wParam))
{
CharLowerBuffW((PWSTR)&wParam, 1);
}
break;
case WM_NCDESTROY:
RemoveWindowSubclass(hWnd, SubEditWindowProc, uIdSubclass);
break;
}
return DefSubclassProc(hWnd, uMsg, wParam, lParam);
}
对于某些语言,可能会CharUpperBuff
而CharLowerBuff
需要使用LCMapString[Ex]
,但对于大多数语言而言CharUpperBuff
和CharLowerBuff
就足够了