以下是用C++实现上述功能的示例代码:
```cpp
#include <Windows.h>
#include <CommCtrl.h>
#pragma comment(lib, "Comctl32.lib")
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// 初始化公共控件
INITCOMMONCONTROLSEX icex = { sizeof(INITCOMMONCONTROLSEX), ICC_STANDARD_CLASSES };
InitCommonControlsEx(&icex);
// 创建窗口
HWND hWnd = CreateWindowEx(0, WC_DIALOG, "Table with Checkboxes", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hInstance, NULL);
// 创建组合框
HWND hComboBox = CreateWindowEx(0, WC_COMBOBOX, NULL, WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST, 10, 10, 150, 200, hWnd, NULL, hInstance, NULL);
// 添加行为十一
SendMessage(hComboBox, CB_ADDSTRING, 0, (LPARAM)"行为十一");
// 创建列表视图
HWND hListView = CreateWindowEx(0, WC_LISTVIEW, NULL, WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_OWNERDRAWFIXED, 10, 40, 364, 200, hWnd, NULL, hInstance, NULL);
// 添加表头
LVCOLUMN lvc = { 0 };
lvc.mask = LVCF_TEXT | LVCF_WIDTH;
lvc.cx = 80;
lvc.pszText = "Column 1";
SendMessage(hListView, LVM_INSERTCOLUMN, 0, (LPARAM)&lvc);
lvc.cx = 80;
lvc.pszText = "Column 2";
SendMessage(hListView, LVM_INSERTCOLUMN, 1, (LPARAM)&lvc);
lvc.cx = 80;
lvc.pszText = "Column 3";
SendMessage(hListView, LVM_INSERTCOLUMN, 2, (LPARAM)&lvc);
// 添加行
LVITEM lvi = { 0 };
lvi.mask = LVIF_TEXT;
lvi.iItem = 0;
lvi.iSubItem = 0;
lvi.pszText = "Item 1";
SendMessage(hListView, LVM_INSERTITEM, 0, (LPARAM)&lvi);
lvi.iSubItem = 1;
lvi.pszText = "Item 2";
SendMessage(hListView, LVM_SETITEM, 0, (LPARAM)&lvi);
lvi.iSubItem = 2;
lvi.pszText = "Item 3";
SendMessage(hListView, LVM_SETITEM, 0, (LPARAM)&lvi);
// 添加复选框
HWND hCheckBox = CreateWindowEx(0, WC_BUTTON, NULL, WS_CHILD | WS_VISIBLE | BS_CHECKBOX, 250, 60, 20, 20, hListView, NULL, hInstance, NULL);
SendMessage(hListView, LVM_SETITEMSTATE, 0, (LPARAM)MAKELONG(LVIS_SELECTED, LVIS_SELECTED));
SendMessage(hListView, LVM_SETITEMSTATE, 0, (LPARAM)MAKELONG(0, LVIS_FOCUSED));
SendMessage(hListView, LVM_SETITEMSTATE, 0, (LPARAM)MAKELONG(1, LVIS_FOCUSED));
SendMessage(hListView, LVM_SETITEMSTATE, 0, (LPARAM)MAKELONG(0, LVIS_SELECTED));
SendMessage(hListView, LVM_SETITEMSTATE, 1, (LPARAM)MAKELONG(LVIS_SELECTED, LVIS_SELECTED));
SendMessage(hListView, LVM_SETITEMSTATE, 1, (LPARAM)MAKELONG(1, LVIS_FOCUSED));
SendMessage(hListView, LVM_SETITEMSTATE, 1, (LPARAM)MAKELONG(2, LVIS_FOCUSED));
SendMessage(hListView, LVM_SETITEMSTATE, 1, (LPARAM)MAKELONG(1, LVIS_SELECTED));
// 显示窗口
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
// 消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
return 0;
}
```
在上述代码中,我们使用了 Windows API 中的组合框、列表视图和复选框控件。首先,我们创建了一个组合框,并向其中添加了一个字符串 "行为十一"。然后,我们创建了一个列表视图,并向其中添加了三列表头和一行数据。接着,我们使用 LVM_SETITEMSTATE 消息在列表视图中选中了第一行和第二行,并在第一行和第二行中的第二列和第三列位置上添加了复选框。最后,我们创建了一个窗口并将组合框和列表视图添加到窗口中,并显示了窗口。