这是我在这里的第一篇帖子,我正在尝试学习在代码块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;
}
答案 0 :(得分:0)
您的代码存在一些问题,请查看MSDN Docs for DlgDirList():
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);
确保pbuffer
和sbuffer
都包含路径和通配符字符串,例如“C:\ personal \ * .txt”和“C:\ shared \ * .txt”。
This link包含如何使用DlgDirList
的示例。