我想将列表框控件中的文本添加到我的主窗口的子窗口中。child 本质上是一个编辑控件,但不是一个对话框。我已经尝试了一些不同的功能但没有成功,我相信我的问题是我需要在添加文本之前以某种方式将焦点从对话框窗口切换到子窗口。我不希望得到特定代码的答案,但如果我能指出一个有用的功能或概念,那就太好了!
编辑:列表框是一个较大的对话框窗口的一部分,允许用户输入文本,然后将其添加到列表中。这些功能运行良好。我想做的是当用户单击对话框上的按钮时,将添加到列表中的文本移到子窗口中,最好无需用户在单击按钮之前选择项目。
有很多代码,但我认为这些部分是相关的:
子窗口:
case WM_CREATE:
{
hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL,
0, 0, 100, 100, w, (HMENU) IDC_EDIT, NULL, NULL);
if (hEdit == NULL){
MessageBox(NULL, "Could not create child window :(", "ERROR", MB_ICONEXCLAMATION | MB_OK);
return 0;
}
}
break;
case WM_SIZE:
{
RECT wSize;
GetClientRect(w, &wSize);
SetWindowPos(hEdit, NULL, 0, 0, wSize.right, wSize.bottom, NULL);
}
通过单击对话框上的按钮向子窗口添加文本的功能(HWND hEdit,子窗口,全局定义):
case ID_ADDMAIN:
{
HWND hList = GetDlgItem(w, IDC_LIST1);
int count = SendMessage(hList, LB_GETCOUNT, NULL, NULL);
if (count > 0){
DWORD textLength = GetWindowTextLength(hList);
LPSTR alloc;
alloc = (LPSTR) GlobalAlloc(GPTR, textLength + 1);
if(GetWindowText(hList, alloc, textLength + 1)){
SendMessage(hEdit, WM_SETTEXT, NULL, (LPARAM) alloc);
}
GlobalFree(alloc);
}
else{
MessageBox(NULL, "There's nothing to add!", "???", MB_ICONINFORMATION | MB_OK);
}
}
break;
除了 SendMessage 函数之外,我还尝试了 SetWindowText,并尝试使用 for 循环而不是 GetWindowText 分别获取列表框中的每个字符串。预先感谢您的帮助。