作者worldxxi (風)
看板C_and_CPP
標題[問題] 鍵盤游標 & 判斷TCHAR陣列是否空白
時間Wed Aug 5 17:07:31 2009
http://codepad.org/b12GpGNB
我在視窗內建了一個EDIT的文字輸入框,這是用SetWindowLong設為處理EDIT的函式:
LRESULT CALLBACK EditProc (HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
TCHAR szBuf[64];
memset(szBuf, 0, 64*sizeof(TCHAR));
switch (message){
case WM_KEYDOWN:
if(wParam == VK_RETURN)
{
GetWindowText(hwnd, szBuf, 64);
if(szBuf!=NULL)
SendMessageToMySQL(hwnd,szBuf);
SetWindowText(hwnd, TEXT(""));
SetFocus(hwnd);
SetCaretPos(2,2);
}
break;
}
return CallWindowProc (OldEdit, hwnd, message, wParam,
lParam) ;
}
但是我光處理這兩個問題就耗去超過6個小時還沒辦法,
*第一個是關於游標的問題:
其中的SetCaretPos我用Step-by-Step偵錯,執行完那一行時,確實有回到起點
可是return之後游標就會跑到下一行沒有辦法回到Edit的起點,請問要怎麼修改
*另外一個就是判斷對話框的內容是否空白就按了Enter鍵:
GetWindowText(hwnd, szBuf, 64);
if(szBuf!=NULL)
SendMessageToMySQL(hwnd,szBuf);
我元本以為這很單純的一件事情,可是比我想像中複雜很多,其中
最讓我覺得活見鬼的就是szBuf竟然不能全部初始化為零
szBuf[0]和szBuf[1]一定都是亂碼,另外不知道是不是編譯器最佳化的問題,
if(szBuf!=NULL)沒辦法插入偵錯點導致無法判斷,為什麼會有這種現象呢?
我試過去比較szBuf[0]和szBuf[1]是否不等於那兩個亂碼值,明明if裡面都
顯示false了他還繼續執行SendMessageToMySQL(hwnd,szBuf);
弄到最後不知道該如何是好。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.96.186.76
→ pico2k:szBuf是位址,不可能等於NULL 08/05 19:17
→ worldxxi:那應該要怎麼判斷才對呢? 08/05 22:36
→ tsaiminghan:你可以把你的問題說清楚嗎? 08/05 23:19
→ tsaiminghan:我只知道結果不如你所想,但是看不清你的輸入 08/05 23:20
→ tsaiminghan:和想要的結果 08/05 23:20
→ tsaiminghan:像第二個問題,我覺得szBuf[0] != 0 應該就可以吧 08/05 23:21
→ tsaiminghan:看不懂為什麼會是亂碼?你是作什麼樣的動作? 08/05 23:22
→ worldxxi:我就是不懂為什麼無緣無故會有值在裡面,至於第一個我想 08/05 23:29
→ worldxxi:要的就是像msn的輸入文字框一樣,按下enter之後,游標會 08/05 23:30
→ worldxxi:會回到原來的位置,可是我做出來的游標是會跑到下一行 08/05 23:31
→ worldxxi:我沒輸入任何字在文字框就按下enter,可是szBuf[0]szBuf[ 08/05 23:33
→ worldxxi:就是會有非零值在裡面,而且是在執行GetWindowText之前 08/05 23:35
→ worldxxi:有強者學長幫我把問題解決了,原來前兩個是有關寬字元的 08/06 14:21
→ worldxxi:訊息,本來就不能寫入 08/06 14:51