您的位置:首页 > 其它

VC小技巧汇总之对话框技巧

2014-12-05 10:00 288 查看
这篇文章主要介绍了VC小技巧汇总之对话框技巧,非常实用!对于进行VC开发有一定的参考借鉴价值,需要的朋友可以参考下
本文搜集汇总了VC中关于对话框常用的一些技巧,对于进行VC开发由于一定的参考借鉴价值。

1.如何修改对话框的背景色:

在对话框的OnPaint()函数中加入下面语句:

3.如何让打开文件对话框能进行多项选择:

在定制打开文件对话框时,增加OFN_ALLOWMULTISELECT属性,就可以使打开文件对话框进行多选了。

如:

?
4.为什么用打开文件对话框选择多个文件到一定数目时,文件没有打开?

CFileDialog为文件列表设置有缓冲区,当选择文件过多时,会造成缓冲区溢出,造成一些文件没有被打开。可以采用自定义大缓冲区代替系统缓冲区的方法解决。

如:

?
5.提示对话框(MessageBox)

在视类和对话框类中可使用MFC函数中用的MessageBox()函数弹出提示对话框。这个函数原型为:

?
参数:

lpszText 显示的字符串

lpsCaption 对话框的标题

nType 风格,可为如下值的组合:

指定下列标志中的一个来显示消息框中的按钮,标志的含义如下。

MB_ABORTRETRYIGNORE:消息框含有三个按钮:Abort,Retry和Ignore。

MB_OK:消息框含有一个按钮:OK。这是缺省值。

MB_OKCANCEL:消息框含有两个按钮:OK和Cancel。

MB_RETRYCANCEL:消息框含有两个按钮:Retry和Cancel。

MB_YESNO:消息框含有两个按钮:Yes和No。

MB_YESNOCANCEL:消息框含有三个按钮:Yes,No和Cancel。

指定下列标志中的一个来显示消息框中的图标:标志的含义如下。

MB_ICONEXCLAMATION:

MB_ICONWARNING:一个惊叹号出现在消息框。

MB_ICONINFORMATION:

MB_ICONASTERISK:一个圆圈中小写字母i组成的图标出现在消息框。

MB_ICONOUESTION:一个问题标记图标出现在消息框。

MB_ICONSTOP:

MB_ICONERROR:

MB_ICONHAND:一个停止消息图标出现在消息框。

指定下列标志中的一个来指定缺省的按钮:标志的含义如下。

MB_DEFBUTTON1:第一个按钮为缺省按钮。如果MB_DEFBUTTON2,MB_DEFBUTTON3,MB_DEFBUTTON4没有被指定,则MB_DEFBUTTON1为缺省值。

MB_DEFBUTTON2;第二个按钮为缺省按钮。

MB_DEFBUTTON3:第三个按钮为缺省按钮。

MB_DEFBUTTON4:第四个按钮为缺省按钮。

例:提示文件是否存盘:

?
在文档类等其它类中不能使用MFC中的MessageBox()函数,只能使用API函数中的MessageBox()函数:

?
hWnd:标识将被创建的消息框的拥有窗口。如果此参数为NULL,则消息框没有拥有窗口。

后三个参数与视类的MessageBox相同,但没有缺省值,必须设置。

例:

本文搜集汇总VC的5则小技巧,非常实用,对于VC程序设计有很好的参考借鉴价值,详情如下:

1.如何获取程序所在的路径

也就是获取你这个程序本身所在的路径。

在应用程序类CxxApp的头文件中定义一个变量CString m_exePath;用来放置程序的路径名,在应用程序类CxxApp的InitInstance()函数中加入如下语句:

?
这段程序执行后,字符串变量m_exePath中放置的就是程序所在路径,其中不包括程序名。

获取程序的位置有什么用呢?

(1)打开与应用程序在一起放置的数据文件:

如果你运行程序过程中使用过打开文件对话框打开过其它路径下的文件,这时系统的默认路径就发生了改变,有可能使你原定的数据文件打不开了,如果采用以下方法就可以没问题了:

?
(2)放置程序运行中的临时文件:

同样,当系统的默认路径发生改变后,程序中生成的临时文件就会放得到处都是,成了一个个垃圾文件,采用以下方法可使临时文件只放在程序所在路径下:

?
程序结束时,用下面的方法删除临时文件:

?
2.如何在你的程序中执行其它程序

在自己的程序中调用其它程序的方法有好几种,这里我介绍我用过的两种:

(1)WinExec()函数:

一般用法:

?
m_PathName为执行程序的路径名,必须为可执行文件。

如:

?
(2)ShellExecute()函数:

一般用法:

?
m_PathName为打开的程序路径名;

_T("c:\temp")为工作目录;

与WinExec()不同的是ShellExecute()函数也可以打开非可执行文件,比如你指定的文件为.txt,结果会打开记事本装入该文件。我用这种方法调用自己制作的帮助文件(.chm)效果很好。

3.如果不使用串行化,如何在程序结束时保存文件?

在文档-视图结构中,用串行化自动保存文件在各种VC书上都有介绍。现在的问题是我不使用串行化,而是自己动手保存,当点击窗口的关闭按钮时,如何提示并保存文档。

用ClassWizard在文档类(CxxDoc)中添加函数CanCloseFrame(),再在其中加入保存文件的语句就可以了。

例:

?
这样当你单击窗口上的关闭按钮时,如果数据已修改了,就会弹出一个提示保存数据的对话框,提示你保存数据。

程序中的b_Flag是数据修改标志,应该在修改数据时进行设置,m_Text是准备保存的数据,放在文档内。

4.POSITION怎么用?

POSITION类型数据用于表征各种列表中元素的位置,它类似于数组的下标,但又有所不同。主要区别是:

我们不能访问POSITION型数据的值,也不能对POSITION数据型数据进行加减、比较等运算。

用POSITION型数据访问列表时,都是采用迭代法,一般格式为:

?
GetNext()就是一种迭代,其格式为:

?
首先,它返回当前pos位置处的元素;再就是把pos值修改为下一个元素位置。这样循环时,可依次取得列表中各元素的值;当到达列表尾时,pos为NULL,循环结束。

所以使用POSITION型数据时,你不要试图用加减等操作去修改它,只能用GetNext()(向后迭代)或GetPrev()(向前迭代)反复迭代来修改它的值。

如果你想直接到达指定值,还可以用Find()函数或FindIndex()函数获得指定值的POSITION值。

?
如:

?
总之,POSITION类型在多种涉及列表的类中提供,不同的类提供的函数有所不同,但用法都是类似的。

5.如何从完整的文件路径中分离文件名和路径名?

从路径中分离文件名:

?
从路径中分离路径名(去除文件名):

?
http://www.jb51.net/article/52459.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: