MFC程序员WTL指南(6)高级对话框用户界面类
2008-01-19 20:25:19 来源:WEB开发网只是这次我们不是调用UIAddToolbar()或UIAddStatusBar(),而是调用UIAddChildWindowContainer(),它告诉CUpdateUI我们的对话框含有需要updating的字窗口,只要看看OnIdle(),你会怀疑少了写什么:
BOOL CMainDlg::OnIdle()
{
return FALSE;
}
你可能猜想这里应该调用另一个CUpdateUI的方法做一些实在的updating工作,你是对的,应该是这样的,向导在OnIdle()中漏掉了一行代码,现在加上:
BOOL CMainDlg::OnIdle()
{
UIUpdateChildWindows();
return FALSE;
}
为了演示UI updating,我们设定鼠标点击左边的位图按钮,使得右边的按钮变得可用或禁用。先在update UI链中添加一个消息入口,使用UPDUI_CHILDWINDOW标志表示此入口是子窗口类型:
BEGIN_UPDATE_UI_MAP(CMainDlg)
UPDATE_ELEMENT(IDC_ALYSON_BMPBTN, UPDUI_CHILDWINDOW)
END_UPDATE_UI_MAP()
在左边的按钮的单击事件处理中,我们调用UIEnable()来翻转另一个按钮的使能状态:
void CMainDlg::OnAlysonODBtn ( UINT uCode, int nID, HWND hwndCtrl )
DDV
{
static bool s_bBtnEnabled = true;
s_bBtnEnabled = !s_bBtnEnabled;
UIEnable ( IDC_ALYSON_BMPBTN, s_bBtnEnabled );
}
WTL的对话框数据验证(DDV)比MFC简单一些,在MFC中你需要分别使用DDX(对话框数据交换)宏和DDV(对话框数据验证)宏,在WTL中只需一个宏就可以了,WTL包含基本的数据验证支持,在DDV链中可以使用三个宏:
DDX_TEXT_LEN
和DDX_TEXT一样,只是还要验证字符串的长度(不包含结尾的空字符)小于或等于限制长度。 DDX_INT_RANGE
and DDX_UINT_RANGE
和DDX_INT,DDX_UINT一样,还加了对数字的最大最小值的验证。 DDX_FLOAT_RANGE
除了像DDX_FLOAT一样完成数据交换之外,还验证数字的最大最小值。
更多精彩
赞助商链接