[英]WinAPI: tabcontrol, images and line breaks
我正在使用带有选项卡的子窗口来显示程序的结果。 选项卡上不需要按钮或其他控件,仅需要一些文本和图像。 但是,到目前为止,我所能实现的就是在标签上放置一些没有换行符的文本。
这是我用来创建输出窗口的方法:
LRESULT CALLBACK ChildProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
TCITEMW tie;
INITCOMMONCONTROLSEX icex;
switch(msg) {
case WM_CREATE:
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_TAB_CLASSES;
InitCommonControlsEx(&icex);
// Create tab control
hTab = CreateWindowW(WC_TABCONTROLW, NULL, WS_CHILD | WS_VISIBLE,
0, 0, X_FENSTER-15, Y_FENSTER-120, hWnd,(HMENU) ID_TABCTRL, NULL, NULL);
// Create 8 tabs
int i;
tie.mask = TCIF_TEXT;
for (i = 0; i < 8; i++){
// Set labels for tab
switch(i){
case 0: tie.pszText = L"Übersicht";
break;
case 1: tie.pszText = L"Einzel";
break;
case 2: tie.pszText = L"Topol. 1";
break;
case 3: tie.pszText = L"Topol. 2";
break;
case 4: tie.pszText = L"Topol. 3";
break;
case 5: tie.pszText = L"Topol. 4";
break;
case 6: tie.pszText = L"Topol. 5";
break;
case 7: tie.pszText = L"Topol. 6";
break;
}
// Create tab
SendMessageW(hTab, TCM_INSERTITEMW, (LRESULT)i, (LPARAM) (LPTCITEM) &tie);
// Receive string to write on tab
wchar_t puffer[ERGSTRING];
ausgabe(i - 1, puffer); // writes string to puffer
// Write string on tab
kartei[i] = CreateWindowExW(0, L"STATIC", puffer, WS_CHILD | WS_VISIBLE | SS_CENTER | SS_CENTERIMAGE , // control style
175, // x position
75, // y position
200, // control width
60, // control height
hTab, // parent control
(HMENU)i, // menu/ID info
hInst, // instance handler
NULL // no extra creation data
);
ShowWindow(kartei[i], SW_HIDE);
}
ShowWindow(kartei[0], SW_SHOW); // First tab to the foreground
// Create Button (BTN_CLOSE)
CreateWindowW(WC_BUTTONW, L"Schließen", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
80, Y_FENSTER - 90, 80, 30, hWnd, (HMENU) BTN_CLOSE, NULL, NULL);
break;
结果看起来像这样:
但是,我想显示多行文本并添加图片。 我已经尝试使用此位图加载位图:
HANDLE bmp7 = LoadImageA(hInst, MAKEINTRESOURCE (8002), 0, 0, 0, LR_DEFAULTCOLOR);
if (bmp7 == NULL) MessageBox(NULL, "Bitmap not loaded.", "Error!", MB_ICONEXCLAMATION | MB_OK);
这将返回我要显示的位图的句柄。 错误消息不会被触发,但是我不知道如何将该图像放置在我的选项卡上。 我能做什么?
如果您可以将图像转换为图标,这将是解决此问题的简便方法,则大多数标准控件(尤其是静态控件)只能处理图标,而不能处理常规位图。
如果这不是一个选择,那么您的下一个最佳选择可能是创建另一个窗口类,其实例将充当选项卡控件客户区。 然后,该类将负责绘制您想要显示的位图和文本。
我解决了问题。
图像:我必须为图像创建单独的HWND。 现在,我使用以下代码。
HANDLE topoBitmap = LoadImageA(hInst, MAKEINTRESOURCE (8000+i), 0, 0, 0, LR_DEFAULTCOLOR); if (topoBitmap != NULL){ kartei[i+8] = CreateWindowExW(0, L"STATIC", puffer, WS_CHILD | WS_VISIBLE | SS_LEFT | SS_BITMAP, 20, 75, 100, 100, hTab, (HMENU)i, hInst, NULL); SendMessage(kartei[i+8], STM_SETIMAGE, (WPARAM) IMAGE_BITMAP, (LPARAM) topoBitmap); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.