您的位置:首页 > 编程语言

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”);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: