WTL向动态创建的按钮添加工具提示



我一直在使用Windows模板库创建一个模态对话框,我需要动态创建按钮并向它们添加工具提示。我似乎找不到正确的方法来做这件事:


// CMyDialog.h
#pragma once
#include "stdafx.h"
class CMyDialog : public CDialogImpl<CIdleDialog> {
public:
enum { IDD = IDD_IDLEDIALOG };
protected:
BEGIN_MSG_MAP(CMyDialog)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
END_MSG_MAP()
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam,
BOOL &bHandled)
{
CRect dialog_rect(0, 0, 600, 400);
MoveWindow(&dialog_rect);
CenterWindow();
CButton btn;
CRect btn_rect(10, 10, 200, 30);
btn.Create(this->m_hWnd, btn_rect, L"Test Button",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_FLAT, NULL,
BTN_ID_OFFSET + 1);
CToolTipCtrl tooltip;
tooltip.Create(this->m_hWnd, rcDefault, NULL,
TTS_BALLOON | TTS_NOPREFIX);
TOOLINFO ti = {sizeof(ti)};
ti.hwnd = this->m_hWnd;
ti.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
ti.uId = (UINT_PTR)btn.m_hWnd;
ti.lpszText = (LPWSTR)L"THIS IS A TOOLTIP";
if (!tooltip.AddTool(&ti)) {
ocdbg("Could not add tooltip to button.n");
}
tooltip.Activate(TRUE);
return TRUE;
}
};

关于我如何运行这个对话框:


// main.cpp
#include "stdafx.h"
#include "CMyDialog.h"
CAppModule _Module;
int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance,
_In_ PWSTR pCmdLine, _In_ int nCmdShow)
{
AtlInitCommonControls(ICC_COOL_CLASSES | ICC_BAR_CLASSES);
HRESULT h_res = _Module.Init(NULL, hInstance);
{
CMyDialog dialog;
dialog.DoModal();
}
_Module.Term();
return 0;
}

调用tooltip.AddTool(&ti)返回0,表示失败。我假设这是因为按钮不在我的resource.h文件中。什么好主意吗?

我通过遵循这篇文章https://learn.microsoft.com/en-us/windows/win32/controls/cookbook-overview并将其添加到我的对话框标题的顶部来解决这个问题。

#pragma comment(linker,""/manifestdependency:type='win32' 
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' 
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"")

现在一切都很好!

相关内容

  • 没有找到相关文章