选项卡中的元素 WinAPI
Elements in tabs WinAPI
如何在我的选项卡中添加一些元素(window)?
使用这些:
INITCOMMONCONTROLSEX icex;
TCITEMW tie;
WM_CREATE:
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_TAB_CLASSES;
InitCommonControlsEx(&icex);
Tab = CreateWindowW(WC_TABCONTROLW, NULL, WS_CHILD | WS_VISIBLE,
0, 0, 200, 150, hwnd, (HMENU)ID_TABCTRL, NULL, NULL);
CreateWindowW(WC_BUTTONW, L"Add", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
250, 50, 100, 25, hwnd, (HMENU)BTN_ADD, NULL, NULL);
在 BTN_ADD 中,我创建了两个选项卡。
case BTN_ADD: {
tie.mask = TCIF_TEXT;
tie.pszText = (LPWSTR)L"TAB1";
SendMessageW(Tab, TCM_GETITEMCOUNT, 0, 0);
SendMessageW(Tab, TCM_INSERTITEMW, 1, (LPARAM)(LPTCITEM)&tie);
tie.mask = TCIF_TEXT;
tie.pszText = (LPWSTR)L"TAB2";
SendMessageW(Tab, TCM_GETITEMCOUNT, 0, 0);
SendMessageW(Tab, TCM_INSERTITEMW, 2, (LPARAM)(LPTCITEM)&tie);
SendMessageW(Tab, TCM_GETITEMCOUNT, 0, 0);
//Add item in tab
CreateWindowW(WC_BUTTONW, L"BTN", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
50, 50, 30, 30, Tab, NULL, NULL, NULL);
break;
}
但是在hwnd(main)中添加了这个按钮,当我打开其他标签时,我继续看到这个按钮。我需要在某个标签中添加内容。
第一个标签
第二个标签
我解决了一个问题。理解,这需要使用一个 MoveWindow 函数。这些选项卡不是内容,而是 window (Tab) 的内容附件。我刚刚通过以下方式创建了 Tab:
Tab = CreateWindowW(WC_TABCONTROLW, NULL, WS_CHILD | WS_VISIBLE,
0, 0, TAB_WEIGHT, TAB_HEIGHT,
hwnd, (HMENU)ID_TABCTRL, NULL, NULL);
然后我在Tab(window)上放了几个window(ListBox)。
ListBoxProcesses = CreateWindowEx(WS_EX_CLIENTEDGE, L"ListBox", NULL,
WS_CHILD | WS_VISIBLE | LBS_STANDARD | LBS_WANTKEYBOARDINPUT,
0, 50, TAB_WEIGHT - 20, TAB_HEIGHT - 100,
Tab, (HMENU)ID_LIST, NULL, NULL);
ListBoxModules = CreateWindowEx(WS_EX_CLIENTEDGE, L"ListBox", NULL,
WS_CHILD | WS_VISIBLE | LBS_STANDARD | LBS_WANTKEYBOARDINPUT,
TAB_WEIGHT, 50, TAB_WEIGHT - 20, TAB_HEIGHT - 100,
Tab, (HMENU)ID_LIST, NULL, NULL);
但有一个特点。第一个 window (ListBoxProcesses) 的水平位置为 0。但是第二个 window (ListBoxModules) 的水平位置为 TAB_WEIGHT。选择其他选项卡后,我调用 MoveWindow 函数并移动我的内容。
顺便说一句,是的,我知道需要使用包含以下内容的 WM_NOTIFY 消息:
switch (wParam)
{
case ID_TABCTRL: {
switch (SendMessageW(Tab, TCM_GETCURFOCUS, 0, 0))
{
case FIRST_PAGE: {
MoveWindow(ListBoxProcesses, 0, 50, TAB_WEIGHT - 20, TAB_HEIGHT - 100, TRUE);
MoveWindow(ListBoxModules, TAB_WEIGHT, 50, TAB_WEIGHT - 20, TAB_HEIGHT - 100, TRUE);
break;
}
case SECOND_PAGE: {
MoveWindow(ListBoxProcesses, -TAB_WEIGHT, 50, TAB_WEIGHT - 20, TAB_HEIGHT - 100, TRUE);
MoveWindow(ListBoxModules, 0, 50, TAB_WEIGHT - 20, TAB_HEIGHT - 100, TRUE);
break;
}
default:
break;
}
break;
}
default:
break;
}
First tab
Second tab
如何在我的选项卡中添加一些元素(window)?
使用这些:
INITCOMMONCONTROLSEX icex;
TCITEMW tie;
WM_CREATE:
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_TAB_CLASSES;
InitCommonControlsEx(&icex);
Tab = CreateWindowW(WC_TABCONTROLW, NULL, WS_CHILD | WS_VISIBLE,
0, 0, 200, 150, hwnd, (HMENU)ID_TABCTRL, NULL, NULL);
CreateWindowW(WC_BUTTONW, L"Add", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
250, 50, 100, 25, hwnd, (HMENU)BTN_ADD, NULL, NULL);
在 BTN_ADD 中,我创建了两个选项卡。
case BTN_ADD: {
tie.mask = TCIF_TEXT;
tie.pszText = (LPWSTR)L"TAB1";
SendMessageW(Tab, TCM_GETITEMCOUNT, 0, 0);
SendMessageW(Tab, TCM_INSERTITEMW, 1, (LPARAM)(LPTCITEM)&tie);
tie.mask = TCIF_TEXT;
tie.pszText = (LPWSTR)L"TAB2";
SendMessageW(Tab, TCM_GETITEMCOUNT, 0, 0);
SendMessageW(Tab, TCM_INSERTITEMW, 2, (LPARAM)(LPTCITEM)&tie);
SendMessageW(Tab, TCM_GETITEMCOUNT, 0, 0);
//Add item in tab
CreateWindowW(WC_BUTTONW, L"BTN", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
50, 50, 30, 30, Tab, NULL, NULL, NULL);
break;
}
但是在hwnd(main)中添加了这个按钮,当我打开其他标签时,我继续看到这个按钮。我需要在某个标签中添加内容。
第一个标签
第二个标签
我解决了一个问题。理解,这需要使用一个 MoveWindow 函数。这些选项卡不是内容,而是 window (Tab) 的内容附件。我刚刚通过以下方式创建了 Tab:
Tab = CreateWindowW(WC_TABCONTROLW, NULL, WS_CHILD | WS_VISIBLE,
0, 0, TAB_WEIGHT, TAB_HEIGHT,
hwnd, (HMENU)ID_TABCTRL, NULL, NULL);
然后我在Tab(window)上放了几个window(ListBox)。
ListBoxProcesses = CreateWindowEx(WS_EX_CLIENTEDGE, L"ListBox", NULL,
WS_CHILD | WS_VISIBLE | LBS_STANDARD | LBS_WANTKEYBOARDINPUT,
0, 50, TAB_WEIGHT - 20, TAB_HEIGHT - 100,
Tab, (HMENU)ID_LIST, NULL, NULL);
ListBoxModules = CreateWindowEx(WS_EX_CLIENTEDGE, L"ListBox", NULL,
WS_CHILD | WS_VISIBLE | LBS_STANDARD | LBS_WANTKEYBOARDINPUT,
TAB_WEIGHT, 50, TAB_WEIGHT - 20, TAB_HEIGHT - 100,
Tab, (HMENU)ID_LIST, NULL, NULL);
但有一个特点。第一个 window (ListBoxProcesses) 的水平位置为 0。但是第二个 window (ListBoxModules) 的水平位置为 TAB_WEIGHT。选择其他选项卡后,我调用 MoveWindow 函数并移动我的内容。
顺便说一句,是的,我知道需要使用包含以下内容的 WM_NOTIFY 消息:
switch (wParam)
{
case ID_TABCTRL: {
switch (SendMessageW(Tab, TCM_GETCURFOCUS, 0, 0))
{
case FIRST_PAGE: {
MoveWindow(ListBoxProcesses, 0, 50, TAB_WEIGHT - 20, TAB_HEIGHT - 100, TRUE);
MoveWindow(ListBoxModules, TAB_WEIGHT, 50, TAB_WEIGHT - 20, TAB_HEIGHT - 100, TRUE);
break;
}
case SECOND_PAGE: {
MoveWindow(ListBoxProcesses, -TAB_WEIGHT, 50, TAB_WEIGHT - 20, TAB_HEIGHT - 100, TRUE);
MoveWindow(ListBoxModules, 0, 50, TAB_WEIGHT - 20, TAB_HEIGHT - 100, TRUE);
break;
}
default:
break;
}
break;
}
default:
break;
}
First tab Second tab