Win32 API - 使用 TextOut 在工具栏的空白区域上绘制
Win32 API - Using TextOut to draw over a blank area of a tool bar
我有几个子 window 控件嵌入到工具栏中。我正在尝试使用 TextOut 在两个子项 windows 的正上方添加标签,以便用户知道这些控件的作用。但是,文本永远不会显示。工具栏似乎被绘制在它上面,覆盖了它。我的问题是,如何让文本出现在工具栏的顶部?而不是被它覆盖?这是我正在使用的代码片段。对不起,如果代码草率。我还在学习!如果您需要更多代码,请告诉我,我会提供完整的代码。
感谢您的意见,David B。
case WM_CREATE:
LoadLibrary(TEXT ("Msftedit.dll"));
//Create Child Windows
RichEdit = CreateWindow(MSFTEDIT_CLASS, TEXT("EDITOR"), WS_CHILD | ES_MULTILINE | WS_VISIBLE | WS_BORDER,
0, 0, 0, 0, hwnd, RichEditorID, GetModuleHandle(NULL), NULL);
Toolbar = CreateWindow(TOOLBARCLASSNAME, NULL, WS_CHILD | TBSTYLE_FLAT, 0, 0, 0, 0, hwnd,
ToolBarID, GetModuleHandle(NULL), NULL);
ListboxType = CreateWindow(WC_LISTBOX, NULL, WS_CHILD| WS_VISIBLE, 0, 0, 0, 0, Toolbar, ChildID1 + 2,
GetModuleHandle(NULL), NULL);
ListboxArch = CreateWindow(WC_LISTBOX, NULL, WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, Toolbar, ChildID1 + 3,
GetModuleHandle(NULL), NULL);
hwndBuildButton = CreateWindow(WC_BUTTON, L"Build", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 0, 0, Toolbar, ChildID1 + 4,
GetModuleHandle(NULL), NULL);
EnumChildWindows(hwnd, EditorChildProc, (LPARAM)&rect);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
SetTextAlign(hdc, TA_TOP);
TextOut (hdc, archListBoxPos + 20, 5, ArchLabel, ARRAYSIZE(ArchLabel));
TextOut(hdc, btListBoxPos, 5, BuildLabel, ARRAYSIZE(BuildLabel));
EndPaint(hwnd, &ps);
return 0;
您需要创建一个包含文本的 window,并将其放在工具栏的顶部。您在 wndproc 中所做的绘图始终从属于子控件:它们会掩盖它。
我有几个子 window 控件嵌入到工具栏中。我正在尝试使用 TextOut 在两个子项 windows 的正上方添加标签,以便用户知道这些控件的作用。但是,文本永远不会显示。工具栏似乎被绘制在它上面,覆盖了它。我的问题是,如何让文本出现在工具栏的顶部?而不是被它覆盖?这是我正在使用的代码片段。对不起,如果代码草率。我还在学习!如果您需要更多代码,请告诉我,我会提供完整的代码。
感谢您的意见,David B。
case WM_CREATE:
LoadLibrary(TEXT ("Msftedit.dll"));
//Create Child Windows
RichEdit = CreateWindow(MSFTEDIT_CLASS, TEXT("EDITOR"), WS_CHILD | ES_MULTILINE | WS_VISIBLE | WS_BORDER,
0, 0, 0, 0, hwnd, RichEditorID, GetModuleHandle(NULL), NULL);
Toolbar = CreateWindow(TOOLBARCLASSNAME, NULL, WS_CHILD | TBSTYLE_FLAT, 0, 0, 0, 0, hwnd,
ToolBarID, GetModuleHandle(NULL), NULL);
ListboxType = CreateWindow(WC_LISTBOX, NULL, WS_CHILD| WS_VISIBLE, 0, 0, 0, 0, Toolbar, ChildID1 + 2,
GetModuleHandle(NULL), NULL);
ListboxArch = CreateWindow(WC_LISTBOX, NULL, WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, Toolbar, ChildID1 + 3,
GetModuleHandle(NULL), NULL);
hwndBuildButton = CreateWindow(WC_BUTTON, L"Build", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 0, 0, Toolbar, ChildID1 + 4,
GetModuleHandle(NULL), NULL);
EnumChildWindows(hwnd, EditorChildProc, (LPARAM)&rect);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
SetTextAlign(hdc, TA_TOP);
TextOut (hdc, archListBoxPos + 20, 5, ArchLabel, ARRAYSIZE(ArchLabel));
TextOut(hdc, btListBoxPos, 5, BuildLabel, ARRAYSIZE(BuildLabel));
EndPaint(hwnd, &ps);
return 0;
您需要创建一个包含文本的 window,并将其放在工具栏的顶部。您在 wndproc 中所做的绘图始终从属于子控件:它们会掩盖它。