妯℃佸睘鎬у崟瀹炰緥紼嬪簭涓昏璁茶ВCPropertySheet鍜孋PropertyPage綾葷殑涓嶅悓鏂歸潰銆?br>1錛夊垱寤虹▼搴忕殑妗嗘灦
甯歌涓涓悕涓篗odalDemo鐨凪FC SDI欏圭洰銆傚啀娣誨姞涓や釜瀵硅瘽妗嗭紝ID鍒嗗埆涓篒DD_FINDBOOK_FIND鍜孖DD_FINDBOOK_RESULTS錛屽茍涓轟袱涓璇濇鍒涘緩媧劇敓浜嶤PropertyPage綾葷殑CFindPage綾誨拰CResultsPage綾匯傛坊鍔犱竴涓狪D涓篒DS_FIND錛孋aption涓篎indBook鐨勫瓧絎︿覆璧勬簮錛屽畠灝嗚浼犻掔粰CPropertySheet鏋勯犲嚱鏁般傛渶鍚庯紝鍦↖DR_MAINFRAME鑿滃崟鏍忔坊鍔燘ooks錛屽茍娣誨姞瀛愰」FindBook錛孖D涓篒D_FINDBOOK銆?br>2錛夊崟鍑籌D_FINDBOOK浜嬩歡
鍒涘緩鏈塈DD_FINDBOOK_FIND鍜孖DD_FINDBOOK_RESULTS涓哄睘鎬ч〉鍜孖DS_FIND涓哄睘鎬у崟鐨勭粍鍚堛傚湪榪欓噷鍒涘緩CPropertySheet鐨勬淳鐢熺被CFindSheet銆?
void CMainFrame::OnFindbook()
{
CFindSheet sheet(IDS_FIND);
CFindPage pageFind;
CResultsPage pageResults;
sheet.AddPage(&pageFind);///////////////////////////////////////////////////////////////////////////////////
sheet.AddPage(&pageResults);
sheet.DoModal();
}
3錛夊幓闄ゆ爣鍑嗘寜閽?br> 鏍囧噯鎸夐挳鏈塐K錛圛DOK錛夈丆ancel錛圛DCANCEL錛夈丠elp錛圛DHELP錛夊拰Apply錛圛D_APPLY_NOW錛夈傝繖閲屽幓闄ゆ帀Cancel鍜孉pply涓や釜鎸夐挳銆?
BOOL CFindSheet::OnInitDialog()
{
BOOL bResult = CPropertySheet::OnInitDialog();
int ids[]={ID_APPLY_NOW,IDCANCEL};
for(int i=0;i<sizeof(ids)/sizeof(ids[0]);i++)
{
CWnd* pWnd=GetDlgItem(ids[i]);
if(pWnd)
pWnd->ShowWindow(FALSE);
}
return bResult;
}
4錛夐噸瀹氫綅鏍囧噯鎸夐挳
榛樿鎯呭喌涓嬶紝鏍囧噯鎸夐挳鏄湪灞炴ч〉鐨勪笅鏂癸紝榪欓噷鎶奜K鎸夐挳縐誨埌娌垮睘鎬ч〉鍙沖榻愩?
BOOL CFindSheet::OnInitDialog()
{
BOOL bResult = CPropertySheet::OnInitDialog();
CWnd* pbtnOk=GetDlgItem(IDOK);
CRect rectSheet;
GetWindowRect(rectSheet);
CRect rectOkBtn;
pbtnOk->GetWindowRect(rectOkBtn);
int iBorder=rectSheet.bottom-rectOkBtn.bottom;
rectSheet.right+=rectOkBtn.Width()+iBorder;
rectSheet.bottom=rectOkBtn.top;
MoveWindow(rectSheet);/////////////////////////////////////////////////////////////////////////////
CPropertyPage* page=GetPage(0);//////////////////////////////////////////////////////////////////
CRect rectPage;
page->GetWindowRect(rectPage);
int cxOk=rectOkBtn.Width();
int cyOk=rectOkBtn.Height();
rectOkBtn.top=rectPage.top;
rectOkBtn.bottom=rectOkBtn.top+cyOk;
rectOkBtn.left=rectSheet.right-(cxOk+iBorder);
rectOkBtn.right=rectOkBtn.left+cxOk;
ScreenToClient(rectOkBtn);
pbtnOk->MoveWindow(rectOkBtn);
return bResult;
}
5錛夋洿鏀規爣鍑嗘寜閽殑鏍囬
BOOL CFindSheet::OnInitDialog()
{
BOOL bResult = CPropertySheet::OnInitDialog();
pbtnOk->SetWindowText(_T("Cl&ose"));////////////////////////////////////////////////////////////////
return bResult;
}
6錛夌鐢ㄩ夐」鍗?br> 鍒涘緩涓涓瓨鍌ㄥ綋鍓嶉夐」鍗$儲寮曠殑鎴愬憳鍙橀噺鍜屼竴涓綰沖綋鍓嶈紱佺敤鐨勯夐」鍗$殑鎴愬憳鍙橀噺
int m_iLastActivePage;//褰撳墠閫夐」鍗$儲寮?/span>
CUIntArray m_arrDisabledPages;//琚鐢ㄧ殑閫夐」鍗$儲寮?/span>
娣誨姞紱佺敤鎸囧畾鐨勯夐」鍗$殑鎴愬憳鍑芥暟鍜岃緗凡紱佺敤閫夐」鍗$殑鏍囬鐨勬垚鍛樺嚱鏁?
#define DISABLED_TEXT "-Disabled"
void CFindSheet::DisablePage(int iFirstPage,
)
{
int iPage=iFirstPage;
va_list marker;)////////////////////////////////////////////////
va_start (marker,iFirstPage);)////////////////////////////////////////////////
int nArgs=0;
while(iPage!=-1)
{
m_arrDisabledPages.Add(iPage);
SetDisabledText(iPage);
iPage=va_arg(marker,UINT);)////////////////////////////////////////////////
}
}
void CFindSheet::SetDisabledText(int iPage)///////////////////////////////////////////////
{
CTabCtrl* pTab=GetTabControl();
TC_ITEM ti;
char szText[100];
ti.mask=TCIF_TEXT;
ti.pszText=szText;
ti.cchTextMax=100;
pTab->GetItem(iPage,&ti);
strcat(szText,DISABLED_TEXT);
pTab->SetItem(iPage,&ti);
}
涓虹鐢ㄧ殑閫夐」鍗″鐞嗛氱煡娑堟伅錛氫嬌鐢–lassWizard瀹炵幇OnNotify铏氬嚱鏁幫紝澶勭悊TCN_SELCHANGING閫氱煡娑堟伅錛屼互璁劇疆褰撳墠鐨勯夐」鍗$儲寮曘傚鐞員CN_SELCHANGED娑堟伅錛屼互紜畾鏄惁鍏佽閫夐」鍗¤嬋媧匯傚鏋滀笉鍏佽錛屽垯蹇呴』浼犻掍竴涓狿SM_SETCURSEL娑堟伅銆傚湪榪欎釜娑堟伅涓紝鎸囧畾浜嗕笂涓涓椿鍔ㄧ殑閫夐」鍗$儲寮曘?br> 娣誨姞涓涓嚱鏁版潵楠岃瘉鏄惁紱佺敤浜嗛夐」鍗?
BOOL CFindSheet::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
NMHDR* pnmh=(NMHDR*)lParam;
if(TCN_SELCHANGING==pnmh->code)
m_iLastActivePage=GetActiveIndex();
else if(TCN_SELCHANGE==pnmh->code)
{
int iCurrPage=GetActiveIndex();
if(IsPageDisabled(iCurrPage))
PostMessage(PSM_SETCURSEL,m_iLastActivePage);
}
return CPropertySheet::OnNotify(wParam, lParam, pResult);
}
BOOL CFindSheet::IsPageDisabled(int iPage)
{
BOOL bFoundEntry=FALSE;
int iSize=m_arrDisabledPages.GetSize();
int i=0;
while(i<iSize&&!bFoundEntry)
{
if(m_arrDisabledPages.GetAt(i)==(UINT)iPage)
bFoundEntry=TRUE;
else
i++;
}
return bFoundEntry;
}
嫻嬭瘯紱佺敤閫夐」鍗$殑鍔熻兘
BOOL CFindSheet::OnInitDialog()
{
BOOL bResult = CPropertySheet::OnInitDialog();
DisablePage(1,-1);
return bResult;
}
7錛夐噸鏂板惎鐢ㄥ睘鎬ч〉
EnablePage鍑芥暟鍙渶瑕佸湪m_arrDisabledPages鏁扮粍鎼滅儲鎸囧畾鐨勫睘鎬ч〉鍗沖彲錛屽鏋滄壘鍒頒簡榪欎釜灞炴ч〉錛屽垯浠庢暟緇勪腑鍘繪帀璇ラ〉錛屽茍璋冪敤SetEnabledText鍑芥暟鍘繪帀“-Disabled”
void CFindSheet::SetEnabledText(int iPage)
{
CTabCtrl * pTab=GetTabControl();
TC_ITEM ti;
char szText[100];
ti.mask=TCIF_TEXT;
ti.pszText=szText;
ti.cchTextMax=100;
pTab->GetItem(iPage,&ti);
char * pFound=strstr(szText,DISABLED_TEXT);
if(pFound)
{
*pFound='\0';
pTab->SetItem(iPage,&ti);
}
}
void CFindSheet::EnablePage(int iPage)
{
BOOL bFoundEntry=FALSE;
int iSize=m_arrDisabledPages.GetSize();
int i=0;
while(i<iSize&&!bFoundEntry)
{
if(m_arrDisabledPages.GetAt(i)==(UINT)iPage)
bFoundEntry=TRUE;
else
i++;
}
if(bFoundEntry)
{
m_arrDisabledPages.RemoveAt(i);
SetEnabledText(iPage);
}
}
嫻嬭瘯EnableTab鍑芥暟錛屽鐞咰FindPage涓璅ind鎸夐挳鐨勪簨浠?
void CFindPage::OnButton1()
{
CFindSheet * pParentSheet=(CFindSheet*)GetParent();
ASSERT(pParentSheet->IsKindOf(RUNTIME_CLASS(CFindSheet)));
pParentSheet->EnablePage(1);
}
8錛夋洿鏀歸夐」鍗$殑瀛椾綋
BOOL CFindSheet::OnInitDialog()
{
BOOL bResult = CPropertySheet::OnInitDialog();
m_fontTab.CreateFont(-8,0,0,0,FW_BOLD,0,0,0,1,0,0,0,0,_T("MS Sans Serif"));
CTabCtrl * pTab=GetTabControl();
if(pTab)
pTab->SetFont(&m_fontTab);/////////////////////////////////////////////////////////////////////
return bResult;
}
鐩稿叧鍑芥暟錛?br>sheet.AddPage(&pageFind);
MoveWindow(rectSheet);
CPropertyPage* page=GetPage(0);
pbtnOk->SetWindowText(_T("Cl&ose"));
va_list marker;
va_start (marker,iFirstPage);
iPage=va_arg(marker,UINT);
void CFindSheet::SetDisabledText(int iPage)
{
CTabCtrl* pTab=GetTabControl();
TC_ITEM ti;
char szText[100];
ti.mask=TCIF_TEXT;
ti.pszText=szText;
ti.cchTextMax=100;
pTab->GetItem(iPage,&ti);
strcat(szText,DISABLED_TEXT);
pTab->SetItem(iPage,&ti);
}
BOOL CFindSheet::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
NMHDR* pnmh=(NMHDR*)lParam;
if(TCN_SELCHANGING==pnmh->code)
m_iLastActivePage=GetActiveIndex();
else if(TCN_SELCHANGE==pnmh->code)
{
int iCurrPage=GetActiveIndex();
if(IsPageDisabled(iCurrPage))
PostMessage(PSM_SETCURSEL,m_iLastActivePage);
}
return CPropertySheet::OnNotify(wParam, lParam, pResult);
}
char * pFound=strstr(szText,DISABLED_TEXT);
CFindSheet * pParentSheet=(CFindSheet*)GetParent();
ASSERT(pParentSheet->IsKindOf(RUNTIME_CLASS(CFindSheet)));
pTab->SetFont(&m_fontTab);

]]>