基于属性表(标签页)的应用程序
一个典型的基于属性表的应用程序(或者是标签页)就是任务管理器。
创建基于属性表的应用程序实际上由基于对话框的应用程序改装而来。
1. 用AppWizard创建基于对话框的应用程序。
2. 按照传统创建属性表的方法创建你自己的属性表类CMyPropertySheet。
3. 去掉OK,Cancel,Apply和Help按钮。
去掉Apply和Help按钮可以在属性表的构造函数中进行(另外Help按钮也可通过去掉ID_HELP的映射:ON_COMMAND(ID_HELP, &CWinApp::OnHelp)而去掉)
m_psh.dwFlags |= PSH_NOAPPLYNOW; // Lose the Apply Now button
m_psh.dwFlags &= ~PSH_HASHELP; // Lose the Help button
去掉OK,Cancel则通常通过重载CPropertySheet的OnInitDialog()并利用ShowWindow隐藏(Apply和Help按钮也可以用此法)
int ids[] = { IDOK, IDCANCEL, ID_APPLY_NOW, IDHELP };
for(int i = 0; i < sizeof(ids)/sizeof(int); ++i ) {
CWnd* pWnd = GetDlgItem(ids[i]);
pWnd->ShowWindow(SW_HIDE);
}
4. 调整PropertySheet窗口(去掉隐藏上述按钮而多出的空白)
在OnInitDialg中
CRect rectOK;
CWnd* pWnd = GetDlgItem( IDOK );
pWnd->GetWindowRect( &rectOK );
CRect rect;
GetWindowRect( &rect );
MoveWindow( rect.left, rect.top, rect.Width(), rect.Height() - rectOK.Height() );
5. 调整CMyApp::InitInstance()函数, 将创建对话框的部分改成创建CMyPropertySheet
CMyPropertySheet ps( _T("窗口标题") ); // CMyDlg dlg;
...
一些附加操作:
1. 添加最小化按钮:
不能在PreCreateWindow中添加,没有用的。
必须在OnInitDialog中添加:
void CMainPropertySheet::AddMinimizeBox()
{
SetWindowLong( m_hWnd, GWL_STYLE, GetStyle() | WS_MINIMIZEBOX );
// 必须添加到系统菜单,否则OnSysCommand收不到最小化的消息
GetSystemMenu( FALSE )->AppendMenu( MF_STRING, SC_MINIMIZE, _T( "最小化" ) );
}