ToUnicode函数和重音的问题
Problems with ToUnicode function and accents
搜索这个网站,我看到其他人使用ToUnicode函数有同样的问题,导致双重口音。我的代码示例删除不重要的部分:
在我的cpp文件(窗口已与创建函数CreateWindowsEx):
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:{
//keyboard
rid[0].dwFlags = RIDEV_NOLEGACY |RIDEV_INPUTSINK;
rid[0].usUsagePage = 1;
rid[0].usUsage = 6;
rid[0].hwndTarget = hWnd;
//mouse
rid[1].dwFlags = RIDEV_NOLEGACY |RIDEV_INPUTSINK;
rid[1].usUsagePage = 1;
rid[1].usUsage = 2;
rid[1].hwndTarget = hWnd;
RegisterRawInputDevices(rid,2,sizeof(rid[0]));
}
case WM_INPUT:
KeyProcess(message,lParam);
break;
在我的dll文件中:
LRESULT CALLBACK KeyProcess(UINT msg, LPARAM lParam)
{
LPBYTE lpb = nullptr;
switch (msg)
{
case WM_INPUT:
if(GetRawInputData((HRAWINPUT)lParam,RID_INPUT,NULL,&dwSize,sizeof(RAWINPUTHEADER))==-1){
break;
}
lpb = (LPBYTE)GlobalAlloc(GMEM_FIXED, dwSize);
if(lpb==NULL){
break;
}
if(GetRawInputData((HRAWINPUT)lParam,RID_INPUT,lpb,&dwSize,sizeof(RAWINPUTHEADER))!=dwSize){
GlobalFree(lpb);
break;
}
PRAWINPUT raw=(PRAWINPUT)lpb;
if(raw->header.dwType == RIM_TYPEKEYBOARD)
{
UINT Event;
raw->data.keyboard.MakeCode;
raw->data.keyboard.Flags;
raw->data.keyboard.Reserved;
raw->data.keyboard.ExtraInformation;
raw->data.keyboard.Message;
raw->data.keyboard.VKey;
Event = raw->data.keyboard.Message;
if(Event == WM_KEYDOWN)
{
int ta = ToUnicode(raw->data.keyboard.VKey,raw->data.keyboard.MakeCode,
bChar,&wChar,1,0);
ta = ToUnicode(raw->data.keyboard.VKey,raw->data.keyboard.MakeCode,
bChar,&wChar,1,0);
其中bChar为BYTE bChar[256], wChar为wChar;
根据我所读到的表明,解决方案是调用两次ToUnicode函数,以便在键入时,例如移动字符"6"(其中口音"¨"德国变音符),然后字符"e",我将结果字符"ë"。如果我只调用函数一次,生成的是双德语变音符重音,但调用函数两次,重音放在字符串上,但不出现在记事本中,好像键有缺陷。当被执行的程序停止时,键的行为恢复正常。我做错了什么?我测试过:
if (ta == -1) break;
带或不带test总是相同的错误。使用鼠标一切正常,但键盘却是什么都不工作。
不要乱用WM_INPUT作为文本,它太低级了。
相关文章:
- Visual Studio中的函数声明和函数定义问题
- C++quit()函数中可能存在作用域问题
- 类似于strcat()的函数出现问题
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 类C++中的函数问题(LNK2019和LNK1120错误)
- c++binary_search函数排序数组(流行名称搜索)出现问题
- 关于简单C++函数(is_palindrome)的逻辑的问题
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- constexpr构造函数需要常量成员函数时出现问题
- 添加存储在向量中的大整数的函数出现问题
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 关于 c++ 函数中指针赋值的简单问题
- 如何在标头中声明(或定义)函数的问题
- 有关 c++ 构造函数的问题
- 模板类转换问题 - 无法推断调用的函数
- 从 C++ 中的函数返回数组地址问题
- 关于复制构造函数的一个棘手问题
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题