VC编程技巧一
2010-09-23 22:23
399 查看
一、在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”);
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”);
相关文章推荐
- 【VC编程技巧】文件☞2.6Windows上多级目录的创建和删除
- VC 编程技巧 (一)
- VC编程技巧2 .
- 【转帖】VC界面编程技巧集!
- 【VC编程技巧】文件☞2.5虚拟内存(进程通信)
- VC编程技巧:IE控件的高级用法
- VC编程技巧
- VC 编程技巧 (一)
- VC++编程基本技巧
- VC多文档编程技巧(取消一开始时打开的空白文档)
- VC编程技巧:IE控件的高级用法
- VC 编程技巧 (二)
- 【VC编程技巧】文件☞2.7Windows上[浏览][打开][保存]对话框
- 【VC编程技巧】窗口☞3.5对单文档或者多文档程序制作启动画面
- VC编程技巧(转)
- 【VC编程技巧】窗体☞3.8静态窗口分割
- VC杂项编程技巧
- vc编程技巧总结
- VC++编程技巧三则
- 【VC编程技巧】控件☞4.3Pictrue控件(打造成对话框分割线)