0

これは私の最初の投稿です。コード ブロック 12.11 で win32 GUI をプログラムする方法を学ぼうとしていますが、ここに問題があります。

ダイアログ ボックス ウィンドウ (IDC_LISTP > 個人用プロジェクト ノート) と (IDC_LISTS > 共有プロジェクト ノート) に 2 つのリスト ボックスがあります。

(個人プロジェクトのメモ) は、作成されたダイアログに自動入力されます。また、(共有プロジェクトのメモ) を正しいフォルダーから入力することもできます (共有の更新)。

(共有の更新)をクリックした後にボタン(個人の更新)をクリックすると問題が発生し、(共有プロジェクトのメモ)の内容が(個人のプロジェクトのメモ)リストボックスにロードされます。クリアボタンも使用した後でも、これはまだです(個人の更新)ボタンをクリックすると、(個人のプロジェクトのメモ)が読み込まれます。

どうすればこれを止めることができますか???

誰かこの問題を解決するのを手伝ってくれませんか? 何日も頭を壁にぶつけていませんか?

これは私が現在実験しているコードです。コードのほとんどは私の 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;
        }
4

1 に答える 1

0

コードにはいくつか問題があります。DlgDirList() の MSDN ドキュメントをご覧ください

a) の最初のパラメータは;DlgDirList()である必要があります。コードにエラーチェックがありません。呼び出しがエラーで失敗したhandle to the dialog box that contains the list boxと思われますDlgDirList()

b)ドキュメントはそれを言う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」などのパスとワイルドカード文字列が含まれていることを確認してください。

このリンクには、使用方法のサンプルが含まれていますDlgDirList

于 2013-11-03T08:16:19.960 に答える