




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VC编程经验汇总VC编程经验汇总(一) 1. 窗口最大化、最小化的实现 当我们不能用标题栏的最大化、最小化及恢复按钮而又需在其他的地方实现这些功能,可以在指定的消息处理函数里添加: WINDOWPLACEMENT wndpl; WINDOWPLACEMENT *pwndpl; pwndpl = &wndpl; GetWindowPlacement(pwndpl); pwndpl-showCmd = SW_SHOWMINMIZED; /实现窗口最小化 SetWindowPlacement(pwndpl); 其中GetWindowPlacement()函数获取当前窗口布局的结构WINDOWPLACEMENT的结构变量指针,结构WINDOWPLACEMENT定义为: typedef struct tagWINDOWPLACEMENT UINT length; UINT flags; UINT showCmd; POINT ptMinPosition; POINT ptMaxPosition; RECT rcNormalPosition; WINDOWPLACEMENT; 其中的成员变量showCmd确定当前窗口的状态,取值一般为: SW_HIDE:隐藏窗口 SW_MINIMIZE:最小化指定的窗口 SW_RESTORE:恢复原来的大小 SW_SHOW:以原来的大小激活并显示 SW_SHOWMAXIMIZED:激活并最大化窗口 SetWindowPlacement()函数就是按WINDOWPLACEMENT的设置来显示窗口 2. 为什么要使用GetSafeHwnd()函数 当我们想得到一个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数,通过下面的例子来看其理由: CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); /希望找到资源管理器 HWND hwnd = pwnd-m_hwnd; /得到它的HWND 这样的代码当开始得到的pwnd为空的时候就会出现一个“General protection error”,并关闭应用程序,因为一般不能对一个NULL指针访问其成员,如果用下面的代码: CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); /希望找到资源管理器 HWND hwnd = pwnd-GetSafeHwnd(); /得到它的HWND 就不会出现问题,因为尽管当pwnd是NULL时,GetSafeHwnd仍然可以用,只是返回NULL,通过GetSafeHwnd()的实现代码就更清楚了: _AFXWIN_INLINE HWND CWnd:GetSafeHwnd() const return this = NULL?NULL:m_hWnd; 3. 如何使程序处于极小状态 如果我们不想让程序的窗口被别人看见,就可以让它保持在极小状态:在恢复程序窗口的时候,Window会发送WM_QUERYOPEN消息,只要在其消息处理函数里返回false就可以了。 BOOL CmainFrame:OnQueryOpen() return false; 4. 如何禁止和能用关闭按钮 Cmenu *pmenu = AfxGetMainWnd()-GetSystemMenu(FALSE); if(pmenu) pmenu-EnableMenuItem(SC_CLOSE,MF_BYCOMMAND|MF_GRAYED); 恢复时只需将MF_GRAYED改为MF_ENABLED 5. 如何在程序中延时 方法一: 使用sleep函数,如延时2秒,用sleep(2000); 方法二: 使用sleep函数的不利在于延时期间不能处理其他的消息,如果时间太长,就好象死机一样,利用ColeDateTime类和ColeDateTimeSpan类实现延时就不会出现那样的问题: ColeDateTime start_time = ColeDateTime:GetCurrentTime(); ColeDateTimeSpan end_time = ColeDateTime:GetCurrentTime()-start_time; While(end_time.GetTotalSeconds() GetWindowRect(rcLandmark); rcSmall = rcLarge; rcSmall.bottom = rcLandmark.bottom; if(bexpand) SetWindowPos(NULL,0,0,rcLarge.Width(),rcLarge.Height(), SWP_NOMOVE|SWP_NOZORDER); EnableVisible(); else SetWindowPos(NULL,0,0,rcSmall.Width(),rcSmall.Height(), SWP_NOMOVE|SWP_NOZORDER); EnableVisible(); /在对话框中添加一个成员函数EnableVisible,用于能用和禁止部分控件 void C*Dlg: EnableVisible() CWnd *pwnd = GetDlgItem(GW_CHILD); CRect retest; CRect rcControl; CRect rcShow; GetWindowRect(rcShow); While(pwnd != NULL) pwnd-GetWindowRect(rcControl); if(rcTest.IntersectRect(rcShow,rcControl) pwnd-EnableWindow(TRUE); else pwnd-EnableWindow(FALSE); pwnd = pwnd-GetWindow(GW_HWNDNEXT); 7. 为什么有RichEdit控件的对话框无法显示 如果在对话框上放一个RichEdit控件,往往发现对话框却无法正常显示,这是因为应用程序还没有为RichEdit控件的编辑功能做好准备,解决办法就是在应用程序的InitInstance()函数调用AfxInitRichEdit()函数初始化RichEdit控件 8. 如何指定对话框的默认按钮 当建立一个对话框的时候,在默认条件下,确定按钮(IDOK)是默认按钮,如果需要改变默认的按钮有两种方法: 其一: 直接在确定按钮(IDOK)的属性里去掉Default button风格的选项 其二: 在运行的时候用代码实现,如: /去掉确定按钮(IDOK)的默认按钮 CButton *pokbutton = (CButton *)GetDlgItem(IDOK); Pokbutton-ModifyStyle(BS_DEFPUSHBUTTON,0); /添加IDCANCEL的默认按钮风格 CButton *pcancelbutton = (CButton *)GetDlgItem(IDCANCEL); pcancelbutton-SetButtonStyle(BS_DEFPUSHBUTTON); VC编程经验汇总(三) 1. 显示和隐藏标题栏 方法一:使用API实现 /隐藏TitleBar LONG lStyle = :GetWindowLong(this-m_hWnd, GWL_STYLE); :SetWindowLong(this-m_hWnd, GWL_STYLE, lStyle & WS_CAPTION); :SetWindowPos(this-m_hWnd, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED); / 显示TitleBar :SetWindowLong(this-m_hWnd, GWL_STYLE, lStyle | WS_CAPTION); :SetWindowPos(this-m_hWnd, NULL, 0, 0, 0, 0,?SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED); 方法二:使用CWnd成员函数ModifyStyle实现 / 隐藏TitleBar ModifyStyle(WS_CAPTION, 0, SWP_FRAMECHANGED); / 显示TitleBar ModifyStyle(0, WS_CAPTION, SWP_FRAMECHANGED); 2 . 怎么用SendMessage()来发送消息来清空它的内容?? HWND hEditWnd=GetDlgItem(IDC_EDIT1)-GetSafeHwnd(); :SendMessage(hEditWnd,WM_SETTEXT,(WPARAM)0,(LPARAM); 3. 弹出文件的属性窗口 SHELLEXECUTEINFO ShExecInfo =0; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_INVOKEIDLIST ; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = properties; ShExecInfo.lpFile = c:; /也可以是文件 ShExecInfo.lpParameters = ; ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = SW_SHOW; ShExecInfo.hInstApp = NULL; ShellExecuteEx(&ShExecInfo); 4. 删除一个目录下的所有文件 BOOL DeleteDirectory(LPCTSTR DirName) CFileFind tempFind; /声明一个CFileFind类变量,以用来搜索 char tempFileFind200; /用于定义搜索格式 sprintf(tempFileFind,%s*.*,DirName); /匹配格式为*.*,即该目录下的所有文件 BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind); /查找第一个文件 while(IsFinded) IsFinded=(BOOL)tempFind.FindNextFile(); /递归搜索其他的文件 if(!tempFind.IsDots() /如果不是.目录 char foundFileName200; strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200); if(tempFind.IsDirectory() /如果是目录,则递归地调用 /DeleteDirectory char tempDir200; sprintf(tempDir,%s%s,DirName,foundFileName); DeleteDirectory(tempDir); else /如果是文件则直接删除之 char tempFileName200; sprintf(tempFileName,%s%s,DirName,foundFileName); DeleteFile(tempFileName); tempFind.Close(); if(!RemoveDirectory(DirName) /删除目录 AfxMessageBox(删除目录失败!,MB_OK); return FALSE; return TRUE; 5.? lib和dll文件的区别和联系 .dll是在你的程序运行的时候才连接的文件,因此它是一种比较小的可执行文件格式,.dll还有其他的文件格式如.ocx等,所有的.dll文件都是可执行。 .lib是在你的程序编译连接的时候就连接的文件,因此你必须告知编译器连接的lib文件在那里。一般来说,与动态连接文件相对比,lib文件也被称为是静态连接库。当你把代码编译成这几种格式的文件时,在以后他们就不可能再被更改。如果你想使用lib文件,就必须: 1? 包含一个对应的头文件告知编译器lib文件里面的具体内容 2? 设置lib文件允许编译器去查找已经编译好的二进制代码 如果你想从你的代码分离一个dll文件出来代替静态连接库,仍然需要一个lib文件。这个lib文件将被连接到程序告诉操作系统在运行的时候你想用到什么dll文件,一般情况下,lib文件里有相应的dll文件的名字和一个指明dll输出函数入口的顺序表。如果不想用lib文件或者是没有lib文件,可以用WIN32 API函数Lo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年岸电系统行业当前发展趋势与投资机遇洞察报告
- 2025年应急产业行业当前发展现状及增长策略研究报告
- 收纳培训资料课件
- 收入确认五步法培训课件
- 2025年部编新版语文七年级上册第五单元复习课教案
- 2025年药品检查员培训试题及答案(GSP、GMP试题)
- 撞车后安全知识培训内容课件
- 2025年注册安全工程师考试真题(含答案)
- 2025会计专业技术人员继续教育考试试题和答案
- 摘苹果课件教学课件
- 水电站安全生产应急预案
- 2025年采购人员考试题库及答案
- 造林更新工职业技能等级评价理论知识考试测试题含答案(F卷)
- 2025年低压电工证考试题及参考答案
- 派出所户籍人口管理课件
- 省政府顾问管理办法
- 医院投诉处理课件
- 2025年华住储备干部考试题库
- 防暑降温安全知识培训
- 美容院店长培训
- 肩袖损伤诊断与治疗
评论
0/150
提交评论