1、TRUE;让窗口居中显示以下两种方法可任选其一:在应用程序类(CxxxApp)的 InitInstance() 函数中加入:CenterWindow( GetDesktopWindow() );在主框架类(MainFrm.cpp)的OnCreate()函数中加入:intCMainFrame:OnCreate(LPCREATESTRUCTlpCreateStruct)if(CFrameWnd:OnCreate(lpCreateStruct)=-1)-1;TODO:Deletethesethreelinesyoudontwantthetoolbartobedockablem_wndToolBar.
2、EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);CenterWindow(GetDesktopWindow();/使窗口打开时处于屏幕正中0;如何修改窗口标题窗口标题一般形式为:文档标题 - 程序标题1、设置文档标题:在文档类(CxxxDoc)的OnNewDocument()函数中加入语句:SetTitle(文档名TextEditorDoc.cpp:CTextEditorDoc:OnNewDocument()(!CDocument:OnNewDocument()F
3、ALSE;addreinitializationcodehere(SDIdocumentswillreusethisdocument)未命名.txt/设置文档标题2、设置程序标题:在框架类(CMainFrame)的PreCreateWindow()函数中加入语句:m_strTitle = _T(程序标题MainFrm.cpp:PreCreateWindow(CREATESTRUCT&cs)if(!CFrameWnd:PreCreateWindow(cs)ModifyWindowclassorstylesbymodifyingCREATESTRUCTcsm_strTitle=_T(文本整理器/设
4、置程序标题以上两点比较适用于视图-文档结构的程序,在新建文档时,系统会自动运行OnNewDocument()函数,在其中可以设置合适的标题。对于未采用文档的程序可以用下面的方法修改标题:3、修改窗口标题:修改窗口标题一般在打开文件函数OnFileOpen()和另存为函数OnFileSaveAs()中进行,可以使用下面的函数:AfxGetMainWnd()-SetWindowText(文档标题+ - 其中文档标题和程序标题可使用定义过的串变量。项目篇如何干净的删除一个类?1、先删除项目中对应的.h和.cpp文件,(选中后用Delete键删除)2、保存后退出项目,到文件夹中删除实际的.h和.cpp
5、文件;3、删除.clw文件;4、重新进入项目,进行全部重建(rebuild all)。如何建立一个新类?从“插入”(Insert)菜单中选择“新建类”(New Class),在弹出的对话框中选择基类(Base class),在Name中输入新类的名字(一般都以C开头)即可。如果想要建立一个没有基类的自定义类,则在New Class对话框中把Class type设置为generic,再输入类名即可。如何把外来文件添加到项目中?先把外来文件复制到当前项目的目录下,从“项目”(Project)菜单下选择“添加项目”(Add to Project)下的“Files”菜单项,从弹出的打开文件对话框中把外
6、来文件打开即可。如何在一个工作区中打开多个项目?一般编程者都有这样的经历:做了一个项目,由于不满意,想从头重做,但又想把旧项目的一些可用内容拷到新项目中来,以免做重复工作,这时就需要在新项目中打开旧项目。先打开新项目,从“项目”(Project)菜单下选择“插入项目到工作区”(Insert Project into Workspace),从弹出的打开文件对话框中打开旧项目的.asp文件即可。之后,可以利用“项目”(Project)菜单下的“设置活动项目”(Select Active Project)的选项中切换各打开的项目。注意:在一个工作区中打开的各项目不能同名。如何把项目中的文件分类存放?
7、当我们往项目中添加新类时,它会把源文件放在Source Files下,头文件放在Header Files下。当项目中文件很多时,管理不便,最好添加新节点,把文件分类放置。右击项目节点树的根节点,选择“New Folder.”,在弹出的对话框中填入新节点名,则新节点就建立了,用鼠标节点树中的文件拖入新节点,就可以把文件分类了。以上分类只是在项目的节点树中分类,它不影响文件在磁盘上的位置,所有.cpp文件和.h文件仍在项目的根目录下,最好文件本身也能分类存放在不同文件夹中。在Windows下,用“新建文件夹”在项目的根目录下建立子文件夹,如DialogClass,把所有对话框类的.cpp文件和.h
8、文件拖入其中。回到VC下,右键单击项目树中更改了路径的节点,选择“Properties”,在弹出的对话框中修改文件路径,如:把原路径“.Dialog1.cpp”改为“.DialogClassDialog1.cpp”。打开Dialog1.cpp文件,修改它包含的文件路径。#include stdafx.hPluckBox.hDialog1.h改为:.PluckBox.h打开ClassWizard,它会提示你文件不存在,单击“确定”后,从对话框中用“Browse.”选择文件所在路径,则ClassWizard也可正常使用了。编辑篇编辑代码时,跟随提示消失了怎么办?单击“工具”(Tools)菜单中的“
9、设置”(Options)菜单项,在弹出的Options对话框中选择Editor制表页,把它最下方的四个复选框都选中(Auto list member、Auto type info、Code comments、Auto parameter info),这样,当用户输入“-”或“.”时,会自动显示跟随提示,减少了输入负担。对话框篇如何修改对话框的背景色在对话框的OnPaint()函数中加入下面语句:CRect rect;GetClientRect(&rect);/计算对话框的尺寸dc.FillSolidRect(&rect,RGB(192,248,202);/绘制对话框背景色如何让弹出式对话框具有
10、统一的背景色在应用程序类CxxxApp的InitInstance()函数中加入下面的语句:SetDialogBkColor( RGB(192,248,202) );则所有用户定义的弹出式对话框都以RGB(192,248,202)为背景色,就不需要逐个进行设置了。如何让打开文件对话框能进行多项选择在定制打开文件对话框时,增加OFN_ALLOWMULTISELECT属性,就可以使打开文件对话框进行多选了。CFileDialog m_Dlg( TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT| OFN_ALLOWMULTISELECT,
11、 NULL, NULL );之后,用GetStartPosition()函数获取选择的起始文件位置,用GetNextPathName()函数获取各位置上的文件名。if( m_Dlg.DoModal() = IDOK )POSITION pos;pos = m_Dlg.GetStartPosition();while( pos )m_Path = m_Dlg.GetNextPathName(pos);为什么用打开文件对话框选择多个文件到一定数目时,文件没有打开?CFileDialog为文件列表设置有缓冲区,当选择文件过多时,会造成缓冲区溢出,造成一些文件没有被打开。可以采用自定义大缓冲区代替系统
12、缓冲区的方法解决。/定制打开文件对话框char* pBuf = new char20480;/申请缓冲区m_Dlg.m_ofn.nMaxFile = 20480;/让pBuf代替CFileDialog缓冲区m_Dlg.m_ofn.lpstrFile = pBuf;m_Dlg.m_ofn.lpstrFile0 = NULL;delete pBuf;/回收缓冲区提示对话框(MessageBox)在视类和对话框类中可使用MFC函数中用的MessageBox()函数弹出提示对话框。这个函数原型为:int MessageBox(LPCTSTR lpszText,LPCTSTR lpsCaption=NU
13、LL,UINT nType=MB_OK);参数: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。指定下列标志中的一个来显示消息框中的
14、图标:标志的含义如下。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_DEFBUT
15、TON1为缺省值。MB_DEFBUTTON2;第二个按钮为缺省按钮。MB_DEFBUTTON3:第三个按钮为缺省按钮。MB_DEFBUTTON4:第四个按钮为缺省按钮。例:提示文件是否存盘:int t;t=MessageBox(m_PathName+的文字已经改变,要存盘吗?,警告,MB_YESNOCANCEL | MB_ICONWARNING);if(t=0 | t=IDCANCEL)return;if(t=IDYES)OnFileSave();在文档类等其它类中不能使用MFC中的MessageBox()函数,只能使用API函数中的MessageBox()函数:int MessageBox(
16、HWND hWnd,LPCTSTR lpszText,LPCTSTR lpCaption,UINT UType);hWnd:标识将被创建的消息框的拥有窗口。如果此参数为NULL,则消息框没有拥有窗口。后三个参数与视类的MessageBox相同,但没有缺省值,必须设置。MessageBox(NULL,m_PathName+调试篇error C2146: syntax error : missing ; before identifier 如果出现这个错误且错误数目很多,通常并不是缺失了分号引起的,而是忘记了添加某头文件引起的。最常见的是新加入了对话框,然后用它的类定义了一个对象,再编译出现上面的
17、错误。解决方法是在引用新类的文件中加入#include 类名.h,再编译,错误消失。fatal error C1010: unexpected end of file while looking for precompiled header directive在一个项目中,如果用“New”向工程中添加了一个.cpp文件,编译,出错。解决方法:在新建的.cpp文件的开头加入#include 。发布篇Debug模式和Release模式早就发现用VC编译出来的.exe文件比用Turbo C编译出来的文件大了许多,于是就认为VC编译时一定加了很多没用的东西,记得当时还做过把VC自动生成的项目中自认为没
18、用的函数都删掉的傻事。后来才从网上的文章中了解到还有编译模式一说。Debug模式是用来调试用的,它生成的执行文件中含有大量调试信息,所以很大;Release模式生成的执行文件消除了这些调试信息,可用来作为成品发布。默认情况下是Debug模式,切换方法是在“编译”(Build)菜单中选“设置项目配置”(Set Active Configure)。从弹出的对话框中选择Win32 Release模式,然后再重新编译。这时在工作目录下会多出一个Release目录,其中的exe文件比Debug目录下的那个要小得多。动态链接库和静态链接库用VC做好了一个程序,拿到别人那里却不能运行,这也是很多编程者都经历
19、过的,这样的软件只能在安装有VC的机器上运行,也不应拿出去发布。实际上如果你没有使用ActiveX控件和自定义的动态DLL技术,只需把MFC的动态链接库打包到你的程序里就可以了,也就是使用静态链接库。设置方法:从“项目”(Project)菜单下选择“设置”(Settings),在弹出的对话框中的General选项卡下,把“User MFC in a Shared DLL”改为“User MFC in a Static Library”,关闭对话框后重新编译即可。在静态链接库下编译的文件比动态链接库的要大很多,不过,如果使用Release模式编译,一般也就几百K,它就可以在没有安装VC的机器上运
20、行了。发布VC源代码时,哪些文件可以删除?源代码是给其他VC爱好者提供参考的,如果把所有文件都打包会很大,而且也没有必要,所以为他人提供源代码时可以删除一些不必要的文件。可删除Debug文件夹和Release文件夹;原则上还可删除主文件夹中所有图标为的文件,包括.aps、.ncb、.opt、.plg等文件,它们都能在编译时重建。但一般.clw不要删除,它可能导致ClassWizard不好用。控件篇如何隐藏和显示控件用CWnd类的函数BOOL ShowWindow(int nCmdShow)可以隐藏或显示一个控件。例1:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT
21、1 );/获取控件指针,IDC_EDIT为控件ID号pWnd-ShowWindow( SW_HIDE );/隐藏控件例2:ShowWindow( SW_SHOW );/显示控件按钮的使能与禁止用ClassWizard的Member Variables为按钮定义变量,如:m_Button1;则m_Button1.EnableWindow(true);使按钮处于允许状态m_Button1.EnableWindow(false);使按钮被禁止,并变灰显示改变控件的大小和位置用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置。void MoveWindow
22、(int x,int y,int nWidth,int nHeight);void MoveWindow(LPCRECT lpRect);第一种用法需给出控件新的坐标和宽度、高度;第二种用法给出存放位置的CRect对象;/获取控件指针,IDC_EDIT1为控件ID号MoveWindow( CRect(0,0,100,100) );/在窗口左上角显示一个宽100、高100的编辑控件SetWindowPos()函数使用更灵活,多用于只修改控件位置而大小不变或只修改大小而位置不变的情况:BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y
23、,int cx,int cy,UINT nFlags);第一个参数一般设为NULL;x、y控件位置;cx、cy控件宽度和高度;nFlags常用取值:SWP_NOZORDER:忽略第一个参数;SWP_NOMOVE:忽略x、y,维持位置不变;SWP_NOSIZE:忽略cx、cy,维持大小不变;pWnd = GetDlgItem( IDC_BUTTON1 );/获取控件指针,IDC_BUTTON1为控件ID号SetWindowPos( NULL,50,80,0,0,SWP_NOZORDER | SWP_NOSIZE );/把按钮移到窗口的(50,80)处SetWindowPos( NULL,0,0,
24、100,80,SWP_NOZORDER | SWP_NOMOVE );/把编辑控件的大小设为(100,80),位置不变SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER );/编辑控件的大小和位置都改变以上方法也适用于各种窗口。单选按钮控件(Radio Button)的使用一、对单选按钮进行分组:每组的第一个单选按钮设置属性:Group,Tabstop,Auto;其余按钮设置属性Tabstop,Auto。Radio1、Radio2、Radio3为一组,Radio4、Radio5为一组设定Radio1属性:Group,Tabstop,Auto设定Radio2属性:Tabstop,Auto设定Radio3属性:设定Radio4属性:设定Radio5属性:二、用ClassWizard为单选控件定义变量,每组只能定义一个。m_Radio1、m_Radio4。三、用ClassWizard生成各单选按钮的单击消息函数,并加入内容:void CWEditView:OnRadio1()m_Radio1 = 0;/第一个单选按钮被选中OnRadio2()m_Radio1 = 1;/第二个单选按钮被选中OnRadio3()m_Radio1 = 2;/第三个单选按钮被选中OnRadio4()