锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鐩稿叧鍑芥暟錛?br>sheet.AddPage(&pageFind); MoveWindow(rectSheet); pbtnOk->SetWindowText(_T("Cl&ose")); va_list marker; void CFindSheet::SetDisabledText(int iPage) BOOL CFindSheet::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) return CPropertySheet::OnNotify(wParam, lParam, pResult); char * pFound=strstr(szText,DISABLED_TEXT); CFindSheet * pParentSheet=(CFindSheet*)GetParent(); pTab->SetFont(&m_fontTab);
妯℃佸睘鎬у崟瀹炰緥紼嬪簭涓昏璁茶ВCPropertySheet鍜孋PropertyPage綾葷殑涓嶅悓鏂歸潰銆?br>1錛夊垱寤虹▼搴忕殑妗嗘灦
甯歌涓涓悕涓篗odalDemo鐨凪FC SDI欏圭洰銆傚啀娣誨姞涓や釜瀵硅瘽妗嗭紝ID鍒嗗埆涓篒DD_FINDBOOK_FIND鍜孖DD_FINDBOOK_RESULTS錛屽茍涓轟袱涓璇濇鍒涘緩媧劇敓浜嶤PropertyPage綾葷殑CFindPage綾誨拰CResultsPage綾匯傛坊鍔犱竴涓狪D涓篒DS_FIND錛孋aption涓篎indBook鐨勫瓧絎︿覆璧勬簮錛屽畠?yōu)畣琚紶閫掔粰CPropertySheet鏋勯犲嚱鏁般傛渶鍚庯紝鍦↖DR_MAINFRAME鑿滃崟鏍忔坊鍔燘ooks錛屽茍娣誨姞瀛愰」FindBook錛孖D涓篒D_FINDBOOK銆?br>2錛夊崟鍑籌D_FINDBOOK浜嬩歡
鍒涘緩鏈塈DD_FINDBOOK_FIND鍜孖DD_FINDBOOK_RESULTS涓哄睘鎬ч〉鍜孖DS_FIND涓哄睘鎬у崟鐨勭粍鍚堛傚湪榪欓噷鍒涘緩CPropertySheet鐨勬淳鐢熺被CFindSheet銆?
{
CFindSheet sheet(IDS_FIND);
CFindPage pageFind;
CResultsPage pageResults;
sheet.AddPage(&pageFind);///////////////////////////////////////////////////////////////////////////////////
sheet.AddPage(&pageResults);
sheet.DoModal();
}
{
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;
}
榛樿鎯呭喌涓嬶紝鏍囧噯鎸夐挳鏄湪灞炴ч〉鐨勪笅鏂癸紝榪欓噷鎶奜K鎸夐挳縐誨埌娌垮睘鎬ч〉鍙沖榻愩?
{
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;
}
{
BOOL bResult = CPropertySheet::OnInitDialog();
pbtnOk->SetWindowText(_T("Cl&ose"));////////////////////////////////////////////////////////////////
return bResult;
}
CUIntArray m_arrDisabledPages;//琚鐢ㄧ殑閫夐」鍗$儲寮?/span>
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);
}
{
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 bResult = CPropertySheet::OnInitDialog();
DisablePage(1,-1);
return bResult;
}
EnablePage鍑芥暟鍙渶瑕佸湪m_arrDisabledPages鏁扮粍鎼滅儲鎸囧畾鐨勫睘鎬ч〉鍗沖彲錛屽鏋滄壘鍒頒簡榪欎釜灞炴ч〉錛屽垯浠庢暟緇勪腑鍘繪帀璇ラ〉錛屽茍璋冪敤SetEnabledText鍑芥暟鍘繪帀“-Disabled”
{
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);
}
}
{
CFindSheet * pParentSheet=(CFindSheet*)GetParent();
ASSERT(pParentSheet->IsKindOf(RUNTIME_CLASS(CFindSheet)));
pParentSheet->EnablePage(1);
}
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;
}
CPropertyPage* page=GetPage(0);
va_start (marker,iFirstPage);
iPage=va_arg(marker,UINT);
{
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);
}
{
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);
}
}
ASSERT(pParentSheet->IsKindOf(RUNTIME_CLASS(CFindSheet)));
闃呰鍏ㄦ枃
闃呰鍏ㄦ枃