[問題] 鍵盤游標 & 判斷TCHAR陣列是否空白

看板C_and_CPP (C/C++)作者 (風)時間16年前 (2009/08/05 17:07), 編輯推噓0(0014)
留言14則, 3人參與, 最新討論串1/1
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

08/05 19:17, , 1F
szBuf是位址,不可能等於NULL
08/05 19:17, 1F

08/05 22:36, , 2F
那應該要怎麼判斷才對呢?
08/05 22:36, 2F

08/05 23:19, , 3F
你可以把你的問題說清楚嗎?
08/05 23:19, 3F

08/05 23:20, , 4F
我只知道結果不如你所想,但是看不清你的輸入
08/05 23:20, 4F

08/05 23:20, , 5F
和想要的結果
08/05 23:20, 5F

08/05 23:21, , 6F
像第二個問題,我覺得szBuf[0] != 0 應該就可以吧
08/05 23:21, 6F

08/05 23:22, , 7F
看不懂為什麼會是亂碼?你是作什麼樣的動作?
08/05 23:22, 7F

08/05 23:29, , 8F
我就是不懂為什麼無緣無故會有值在裡面,至於第一個我想
08/05 23:29, 8F

08/05 23:30, , 9F
要的就是像msn的輸入文字框一樣,按下enter之後,游標會
08/05 23:30, 9F

08/05 23:31, , 10F
會回到原來的位置,可是我做出來的游標是會跑到下一行
08/05 23:31, 10F

08/05 23:33, , 11F
我沒輸入任何字在文字框就按下enter,可是szBuf[0]szBuf[
08/05 23:33, 11F

08/05 23:35, , 12F
就是會有非零值在裡面,而且是在執行GetWindowText之前
08/05 23:35, 12F

08/06 14:21, , 13F
有強者學長幫我把問題解決了,原來前兩個是有關寬字元的
08/06 14:21, 13F

08/06 14:51, , 14F
訊息,本來就不能寫入
08/06 14:51, 14F
文章代碼(AID): #1AUKlKkU (C_and_CPP)
文章代碼(AID): #1AUKlKkU (C_and_CPP)