请问我的主对话框无法响应tab contol 里面的按钮消息?
首先加入两个(或数个)对话框资源。修改各对话框资源的属性,将对话框的Caption属性改为你要在标签上所显示的文字。将对话框的Style属性改为:Child, Border属性改为:Thin, 只选中Title Bar复选框,去掉其他复选框。然后你可以在这些对话框中加入要分开显示的各个控件。
在主对话框类里加入一个CPropertySheet类的一个成员变量(m_sheet)代表整个属性页。再加入一些各子对话框类的实例作为成员变量(m_page1、m_page2……)。
在主对话框类的OnInitDialog()函数中加入:
//加入标签,标签名由各个子对话框的标题栏决定
m_sheet.AddPage(&m_page1);
m_sheet.AddPage(&m_page2);
//用Create来创建一个属性页
m_sheet.Create(this, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT);
RECT rect;
m_sheet.GetWindowRect(&rect);
int width = rect.right - rect.left;
int height = rect.bottom - rect.top;
//调整属性页的大小和位置
m_sheet.SetWindowPos(NULL, 20, 50, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
效果如下:
这个方案可以自由在主对话框中加一些必要的控件,而且属性页中的控件也都分散在了各个子对话框类中,使用非常方便。
但是这样也有一些缺陷:主对话框不能处理属性页上标签的消息,即点击标签时无法通知主对话框。
请问这个缺陷怎么解决?
问题点数:100、回复次数:6Top
1 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2005-07-28 10:42:37 得分 0
派生一个CPropertySheet的子类,由它处理相应的消息,如果需要再通道其主(父)窗口。Top
2 楼wanghugo(wh)回复于 2005-07-28 10:50:54 得分 0
我就是不知道具体该怎么通道其父窗口。
比如说我的tab control上有一个关闭按钮
按下去之后关闭整个 tab control
Top
3 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-07-28 11:12:48 得分 50
父窗口的PreTranslateMessage应该可以接获Tab control的消息Top
4 楼wanghugo(wh)回复于 2005-07-28 11:23:28 得分 0
听得不明白,写点代码出来吧
Top
5 楼qrlvls( 空 气 )回复于 2005-07-28 11:28:22 得分 0
对 Tab Control 也可以直接使用子对话框窗口的 SW_SHOW 和 SW_HIDE 来实现Top
6 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-07-28 14:45:58 得分 50
BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->hwnd == m_cTabCtrl.GetSafeHwnd())
{
....
}
}
Top




