2013-11-02 73 views
0

這是我在這裏的第一份工作,我想學習編程代碼塊12.11 win32的GUI,但現在的問題是,列表框不能正確填充

我有一個對話框窗口上有2個列表框(IDC_LISTP>個人項目備註)和(IDC_LISTS>共享項目備註),

(個人項目備註)自動填充在創建的對話框上,我也可以從正確的文件夾中獲取(共享項目備註) (更新共享)。

單擊(更新共享)後點擊按鈕(更新個人)時,即使在使用清除按鈕後,它也會將(共享項目註釋)的內容加載到(個人項目註釋)列表框中當點擊(更新個人)按鈕時,這仍然填充(個人項目筆記),

我該如何阻止這種情況發生?

請能有人幫我解決這個問題,有我一直在敲打我的頭,現在天牆上,

這是我用了目前試驗的代碼,請原諒亂碼,因爲大多數它來自我已經轉換爲適合我的GUI的例子。

增設職位http://forums.codeguru.com/showthread.php?540733-win32-listbox-not-populating-right與圖片太

BOOL CALLBACK DlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam){ 
      switch(Message){ 
       case WM_INITDIALOG: 
       CheckRadioButton(HWND (hwnd),IDRADIO, IDRADIO2, IDRADIO); 
       { 
       DlgDirList(HWND (ID_PROJECT_PROJECT_NOTES), pbuffer, IDC_LISTP, 0, DDL_EXCLUSIVE); 
       HWND hListBox = GetDlgItem(hwnd, IDC_LISTP); 
       SendMessage(hListBox, LB_DIR, 0, (LPARAM)("*.txt*")); 
       } 
      break; 
       case WM_COMMAND: 
        switch(LOWORD(wParam)){ 
         case ID_UPDATEP:{ 
         SendDlgItemMessage(HWND(hwnd), IDC_LISTP, LB_RESETCONTENT, 0, 0); 
         DlgDirList(HWND (ID_PROJECT_PROJECT_NOTES), pbuffer, IDC_LISTP, 0, DDL_EXCLUSIVE); 
         HWND hListBox = GetDlgItem(hwnd, IDC_LISTP); 
         SendMessage(hListBox, LB_DIR, 0, (LPARAM)("*.txt")); 

         } 
         break; 
         case ID_UPDATES:{ 
         SendDlgItemMessage(HWND(hwnd), IDC_LISTS, LB_RESETCONTENT, 0, 0); 
         DlgDirList(HWND (ID_PROJECT_PROJECT_NOTES), sbuffer, IDC_LISTS, 0, DDL_EXCLUSIVE); 
         HWND hList = GetDlgItem(hwnd, IDC_LISTS); 
         SendMessage(hList, LB_DIR, 0, (LPARAM)("*.txt")); 

         } 
         break; 
         case IDCLEAR: 
         SendDlgItemMessage(HWND(hwnd), IDC_LISTP, LB_RESETCONTENT, 0, 0); 
         SendDlgItemMessage(HWND(hwnd), IDC_LISTS, LB_RESETCONTENT, 0, 0); 

          break; 
         case IDCREATE:{ 
         DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDPAD), NULL, DlgProc); 
         } 
          break; 

         case IDOK: 
         EndDialog(hwnd, IDOK); 
         break; 
         case IDCANCEL: 
         EndDialog(hwnd, IDCANCEL); 
         break; 
        } 
        break; 

       case WM_CLOSE: 
        EndDialog(hwnd, 0); 
       break; 
       default: 

        return FALSE; 
      } 
      return TRUE; 
     } 

回答

0

有幾件事情你的代碼錯誤,看看在MSDN Docs for DlgDirList()

一)的第一個參數DlgDirList()需求是handle to the dialog box that contains the list box;沒有錯誤的代碼檢查,我懷疑調用DlgDirList()因錯誤而失敗

二)文檔說DlgDirList sends the LB_RESETCONTENT and LB_DIR messages to the list box

因此,所有你需要做的是

int nResult; 
nResult = DlgDirList(hwnd, pbuffer, IDC_LISTP, 0, 0); 
TRACE("Filling P (ID %d) from %s: result = %d\n", IDC_LISTP, pbuffer, nResult); 
nResult = DlgDirList(hwnd, sbuffer, IDC_LISTS, 0, 0); 
TRACE("Filling S (ID %d) from %s: result = %d\n", IDC_LISTS, sbuffer, nResult); 

製作確保pbuffersbuffer每個都包含路徑和通配符字符串,如「C:\ personal \ *。txt」和「C:\ shared \ *。txt」。

This link包含如何使用DlgDirList的示例。

+0

謝謝你的回覆朋友,我改變了我的代碼,你建議,同樣的問題出現後,你點擊(更新共享按鈕),然後點擊(更新個人按鈕)個人列表填充共享列表。這些是pbuffer和sbuffer,[code] char pbuffer [MAX_PATH] =「C:\\ Users \\ uncboog \\ Documents \\ Nexum Core \\ Project Notepad \\ User \\ * .txt」; char sbuffer [MAX_PATH] =「C:\\ Users \\ uncboog \\ Documents \\ Nexum Core \\ Project Notepad \\ Shared \\ * .txt」; [/ code]我是否會出錯???,我是否會在代碼中包含錯誤消息,再次感謝:) –

+0

我的原始文章作爲鏈接到我的另一個職位,由圖片來顯示輸出http://forums.codeguru.com/showthread.php?540733-win32-listbox-not-populating-right –

+0

爲'TRACE'增加了額外的代碼,你也可以在代碼中放置一個斷點並在修改代碼後檢查 –