我試圖添加可能使用在已經取得登錄/密碼的形式返回鍵。如何在C++的登錄/密碼窗口中使用回車鍵?
的事情是,我沒有做的形式,而這是我第一次使用Windows中的窗口API。所以,有很多我不知道...
因此,基本上,創建一個窗口,在它的內部,三子「窗口」創建。
一個可編輯:登錄
中的第二個可編輯:密碼
以及按鈕:OK
基本上,我在消息回調方法添加一個句柄WM_CHAR:
else if (msg == WM_CHAR)
{
if (wParam == VK_RETURN)
{
char BufLogin[128];
char BufPasswd[128];
GetWindowText(hwndEditLogin, BufLogin, sizeof(BufLogin));
GetWindowText(hwndEditPasswd, BufPasswd, sizeof(BufPasswd));
print_msg(BufLogin);
print_msg(BufPasswd);
return (0);
}
else
return (DefWindowProcW(hwnd, msg, wParam, lParam));
}
(我還用WM_KEYDOWN更換WM_CHAR沒有成功嘗試。)
我的堆棧溢出檢查,唯一的解決方案,我發現事情至今談話我不明白,或者乾脆不工作...
我在消息100g的添加了一個檢查,像這樣:
while(GetMessage(&msg, NULL, 0, 0))
{
if (!IsDialogMessage(hWnd, &msg) || msg.wParam == VK_RETURN)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
而且它沒有工作,除非用戶點擊了任何子窗口上。 ..基本上,如果用戶沒有點擊任何東西或修改任何東西,它就會工作,這使得窗口的登錄/密碼部分非常無用! ^^'
所以我猜測是(!IsDialogMessage)檢查排除了WM_CHAR和WM_KEYDOWN消息(仍然允許用戶輸入某些原因),並且如果我添加了對wParam它可以工作,但只適用於父窗口。
如果你們對如何不要蜘蛛這個難題我的工作,任何想法,我將非常感激!提前致謝! :)
(PS:!我編輯了這個問題之前,我問及如何使TAB鍵工作,因爲檢查的IsDialogMessage會使每個字符出現四次,我只是忘了把!
中的IsDialogMessage之前^ ^' 我做這個筆記,以防萬一有人發現我的問題,並且遇到同樣的問題,我編輯之前!))
與常規窗口仿真進對話框的行爲當然是可能的,但是這是很難做到這一點完全正確(恕我直言)爲什麼不在RC文件和API CreateDialog中使用對話框模板? – manuell
那麼......正如我所說,這部分代碼不是我的! :s 我不知道如何使用Dialog模板! :/ – Asahi
好吧,對於我在做什麼有了更多的瞭解,下面是對您的評論的正確回答: RC文件是否定的,因爲窗口必須是運行時可編輯的! 而我通過在IsDialogMessage之前添加已忘記的'!'來使代碼生效! ^^」 – Asahi