【发布时间】:2014-05-10 12:44:43
【问题描述】:
在我的 SDI 应用程序中,我使用来自 this 文章的 CWTLTabViewCtrl 类。
我想知道如何从子视图更新主框架的状态栏。
mainfrm.h中的代码:
CreateSimpleStatusBar();
// create tabctrl
CTabViewCtrl m_MainTabCtrl;
m_hWndClient = m_MainTabCtrl.Create(
m_hWnd, rcDefault, NULL,
WS_CHILD | WS_VISIBLE, WS_EX_STATICEDGE );
m_MainTabCtrl.AddPeopleTab(L"People);
CTabViewCtrl 类中的代码:
class CTabViewCtrl : public CWTLTabViewCtrl
{
public:
CTabViewCtrl()
{
}
virtual ~CTabViewCtrl()
{
}
void AddPeopleTab(LPCTSTR inTabName)
{
auto tabPeople = CTabPeople;
tabPeople->Create(*this, rcDefault, nullptr, WS_CHILD, WS_EX_STATICEDGE);
AddTab(inTabName, *tabPeople, FALSE, 0, (LPARAM)theProcessesView);
}
public:
DECLARE_WND_SUPERCLASS(NULL, CWTLTabViewCtrl::GetWndClassName())
BOOL PreTranslateMessage(MSG* pMsg)
{
pMsg;
return FALSE;
}
BEGIN_MSG_MAP_EX(CTabViewCtrl)
REFLECT_NOTIFICATIONS()
CHAIN_MSG_MAP(CWTLTabViewCtrl)
END_MSG_MAP()
};
CTabPeople 类的代码(从这个角度来看,我想更新mainfrm.h 的状态栏):
class CTabPeople : public CWindowImpl<CTabPeople, CListViewCtrl>,
public CCustomDraw<CTabPeople>
{
[snip]
public:
DECLARE_WND_SUPERCLASS(NULL, CListViewCtrl::GetWndClassName())
BOOL PreTranslateMessage(MSG* pMsg)
{
pMsg;
return FALSE;
}
BEGIN_MSG_MAP(CTabPeople)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu)
COMMAND_ID_HANDLER(IDM_PROCESSTAB_REFRESH, OnMenuRefresh)
REFLECTED_NOTIFY_CODE_HANDLER(LVN_COLUMNCLICK, OnColumnClick)
CHAIN_MSG_MAP_ALT(CCustomDraw, 1)
END_MSG_MAP()
LRESULT OnMenuRefresh(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL&bHandled)
{
// Here i would like to update the status bar created at the mainfrm.h
// something like UISetText(0, L"Updating..");
}
[snip]
}
从我所做的研究看来,更新状态栏有两种方法:
- 使用状态栏句柄直接从
CTabPeople视图中 - 通过向mainfrm循环发送消息来更新状态栏
我的问题是如何在我的代码中实现上述选项之一。
谢谢。
【问题讨论】:
标签: winapi visual-c++ wtl