一、在vc中,遍曆對話方塊中的所有子控制項
CRect rect;
CWnd *pWnd =
GetWindow(GW_CHILD);
while (pWnd != NULL)
{
pWnd->GetWindowRect(&rect);
// 擷取控制項的尺寸
...
pWnd =
pWnd->GetWindow(GW_HWNDNEXT);
}
二、vc中,多個按鈕控制項共用一個響應函數
假如有5個按鈕,其ID分別為:IDC_BUTTON1、IDC_BUTTON2、...、IDC_BUTTON5,步驟如下:
1、在標頭檔中,聲明響應函數,如下:
afx_msg void OnButtonClick(UINT
nID);
2、在cpp檔案的BEGIN_MESSAGE_MAP與END_MESSAGE_MAP之間加入如下代碼:
ON_COMMAND_RANGE(IDC_BUTTON1,
IDC_BUTTON5, OnButtonClick)
3、響應函數的實現
void OnButtonClick(UINT
nID)
{
switch (nID)
{
case IDC_BUTTON1:
// do something
break;
case IDC_BUTTON2:
// do someting
break;
...
case IDC_BUTTON5:
break;
}
}
三、多個功能表項目共用同一個OnUpdate函數
假如有10個功能表項目,其ID分別為ID_MENU1,...,ID_MENU10,則步驟如下:
1、在標頭檔中聲明響應函數
afx_msg void
OnUpdateOptions(CCmdUI *pCmdUI)
2、在cpp檔案中,添加如下代碼:
ON_UPDATE_COMMAND_UI_RANGE(ID_MENU1,
ID_MENU10, OnUpdateOptions)
3、響應函數的實現
void OnUpdateOptions(CCmdUI
*pCmdUI)
{
switch
(pCmdUI->m_nID)
{
case ID_MENU1:
pCmdUI->Enable(FALSE);
break;
...
case ID_MENU10:
pCmdUI->Enable(TRUE);
break;
}
}
四、得到當前應用程式的路徑
char *str =
new char[256];
::GetModuleFileName(NULL,str,MAX_PATH);
//str即為所求
delete []str;
str=NULL;
// 獲得當前程式運行目錄,不包含檔案名稱
char pFileName[256];
GetModuleFileName(NULL, pFileName,
255);
CString
strFullPath(pFileName);
int nPos = strFullPath.ReverseFind(_T('//'));
// 找最後一個'/'的位置
strFullPath =
strFullPath.Left(nPos);
五、當文檔檔案被修改時在標題上給出提示
建立一個SDI應用程式,在Doc類中重載文檔類的虛函數SetModifiedFlag,代碼如下:
void
CMyDoc::SetModifiedFlag(BOOL bModified)
{
CString strTitle = GetTitle();
CString strDirtyFlag = "
文檔檔案已被修改,注意儲存喔!"; // 注意引號內前面的空格
// 如果不要引號內前面的空格,save as儲存檔案對話方塊中的檔案名稱後會帶*號
if (!IsModified() &&
bModified)
{
SetTitle(strTitle +
strDirtyFlag);
}
else if (IsModified()
&& !bModified)
{
int nTitleLength =
strTitle.GetLength();
int
nDirtyLength = strDirtyFlag.GetLength();
SetTitle(strTitle.Left(nTitleLength -
nDirtyLength));
}
UpdateFrameCounts();
CDocument::SetModifiedFlag(bModified);
}
六、CFileDialog對話方塊選擇多個檔案的處理
// 首先建立一個 CFIleDialog 類執行個體,並設定多選標誌
CFileDialog mFileDlg(TRUE, NULL,NULL,
OFN_ALLOWMULTISELECT,
_T("Text Files (*.txt)|*.txt|All Files (*.*)|*.*||"),
AfxGetMainWnd());
CString pathName;
If(mFileDlg.DoModal ()==IDOK)
{
POSITION
mPos=mFileDlg.GetStartPosition();
while(mPos!=NULL)
{
pathName=mFileDlg.GetNextPathName(mPos);
TRACE("%s/n",pathName);
}
}
else
TRACE(“IDCANCLE/n”);