VisualC编程技巧小结.doc_第1页
VisualC编程技巧小结.doc_第2页
VisualC编程技巧小结.doc_第3页
VisualC编程技巧小结.doc_第4页
VisualC编程技巧小结.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VisualC+编程技巧小结作者:RHU-TAC教程来源:RHU点击数: 164更新时间:2005-12-241. 如何获取应用程序的实例句柄? 应用程序的 实例句柄保存在CWinAppIm_hInstance 中,可以这么调用AfxGetInstancdHandle获得句柄.Example: HANDLE hInstance=AfxGetInstanceHandle();2. 如何通过代码获得应用程序主窗口的指针?主窗口的 指针保存在CWinThread:m_pMainWnd中,调用 AfxGetMainWnd实现。AfxGetMainWnd() -ShowWindow(SW_SHOWMAXMIZED); /使程序最大化.3. 如何在程序中获得其他程序的 图标?两种方法:(1) SDK函数 SHGetFileInfo 或使用 ExtractIcon获得图标资源的 handle,(2) SDK函数 SHGetFileInfo获得有关文件的 很多信息,如大小图标,属性,类型等.Example(1): 在程序窗口左上角显示 NotePad图标.void CSampleView: OnDraw(CDC * pDC)if( : SHGetFileInfo(_T(c:pwin95notepad.exe),0,&stFileInfo,sizeof(stFileInfo),SHGFI_ICON)pDC -DrawIcon(10,10,stFileInfo.hIcon);Example(2): 同样功能,Use ExtractIcon Functionvoid CSampleView: OnDraw(CDC *pDC)HICON hIcon=: ExtractIcon(AfxGetInstanceHandle(),_T(NotePad.exe),0);if (hIcon &hIcon!=(HICON)-1)pDC-DrawIcon(10,10,hIcon);说明: 获得notepad.exe 的路径正规上来说用GetWindowsDirectory 函数得到,如果是调用 win95下的画笔,应该用访问注册表的方法获得其路径,要作成一个比较考究的程序,考虑应该全面点.4. 如何编程结束应用程序?如何编程控制windows 的重新引导?这是个很简单又是编程中经常要遇到的问题.第一问,向窗口发送 WM_CLOSE消息,调用 CWnd:OnClose成员函数.允许对用户提示是否保存修改过的数据.Example: AfxGetMainWindow()-SendMessage(WM_CLOSE);还可以创建一个自定义的函数 Terminate Windowvoid Terminate Window(LPCSTR pCaption)CWnd *pWnd=Cwnd:FindWindow(NULL,pCaption);if (pWnd)pWnd -SendMessage(WM_CLOSE);说明: FindWindow 函数不是提倡的做法,因为它无法处理标题栏自动改变,比如我们要检测 Notepad 是不是已运行而事先不知道Notepad 的标题栏,这时 FindWindow 就无能为力了,可以通过枚举 windows 任务列表的办法来实现。 在 机械出版社Windows 95 API开发人员指南一书有比较详细的介绍,这里就不再多说乐。第二问,Use ExitWindowsEx Function 函数控制系统是重新引导,还是重启 windows.前面已经有人讲过乐,就不再提了。5. 怎样加栽其他的应用程序?我记得这好象是出场频度很高的问题。三个SDK函数 winexec, shellexecute,createprocess可以使用。WinExec 最简单,两个参数,前一个指定路径,后一个指定显示方式.后一个参数值得说一下,比如泥用 SW_SHOWMAXMIZED 方式去加栽一个无最大化按钮的程序,就是Neterm,calc 等等,就不会出现正常的 窗体,但是已经被加到任务列表里了。ShellExecute较 WinExex灵活一点,可以指定工作目录,下面的 Example就是直接打开c:temp1.txt,而不用加栽与 txt 文件关联的应用程序,很多安装程序完成后都会打开一个窗口,来显示Readme or Faq,偶猜就是这么作的啦。ShellExecute(NULL,NULL,_T(1.txt),NULL,_T(c:temp),SW_SHOWMAXMIZED);CreateProcess最复杂,一共有十个参数,不过大部分都可以用NULL 代替,它可以指定进程的安全属性,继承信息,类的优先级等等.来看个很简单的 Example:STARTUPINFO stinfo; /启动窗口的信息PROCESSINFO procinfo; /进程的信息CreateProcess(NULL,_T(notepad.exe),NULL,NULL.FALSE, NORMAL_PRIORITY_CLASS,NULL,NULL, &stinfo,&procinfo);6. 确定应用程序的 路径前些天好象有人问过这个问题.Use GetModuleFileName 获得应用程序的路径,然后去掉可执行文件名。Example:TCHAR exeFullPathMAX_PATH; / MAX_PATH在API中定义了吧,好象是128GetModuleFileName(NULL,exeFullPath,MAX_PATH)7. 获得各种目录信息Windows目录: Use GetWindowsDirectory“Windows下的system目录: Use GetSystemDirectorytemp目录: Use GetTempPath 当前目录: Use GetCurrentDirectory请注意前两个函数的第一个参数为 目录变量名,后一个为缓冲区; 后两个相反.8. 如何自定义消息也有人问过的,其实不难。(1) 手工定义消息,可以这么写 #define WM_MY_MESSAGE(WM_USER+100), MS 推荐的至少是 WM_USER+100;(2)写消息处理函数,用 WPARAM,LPARAM返回LRESULT.LRESULT CMainFrame:OnMyMessage(WPARAM wparam,LPARAM lParam)/加入你的处理函数(3) 在类的 AFX_MSG处进行声明,也就是常说的宏映射9. 如何改变窗口的图标?向窗口发送 WM_SECTION消息。Example:HICON hIcon=AfxGetApp() -LoadIcon(IDI_ICON);ASSERT(hIcon);AfxGetMainWnd() -SendMessage(WM_SECTION,TRUE,(LPARAM) hIcon);10. 如何改变窗口的缺省风格?重写 CWnd: PreCreateWindow 并修改CREATESTRUCT 结构来指定窗口风格和其他创建信息.Example: Delete Max Button and Set Original Windows Position and SizeBOOL CMainFrame: PreCreateWindow (CREATESTRUCT &cs)cs.style &=WS_MAXINIZEMOX;cs.x=cs.y=0;cs.cx=GetSystemMetrics(SM_CXSCREEN/2);cs.cy=GetSystemMetrics(SM_CYSCREEN/2);return CMDIFramewnd :PreCreateWindow(cs);11. 如何将窗口居中显示?Easy, Call Function CWnd: Center WindowsExample(1): Center Window( ); /Relative to its parent/ Relative to ScreenExample(2): Center Window(CWnd: GetDesktopWindow( );/Relative to Applications MainWindowAfxGetMainWnd( ) - Center Window( );12. 如何让窗口和 MDI窗口一启动就最大化和最小化?先说窗口。在 InitStance 函数中设定 m_nCmdShow的 取值.m_nCmdShow=SW_SHOWMAXMIZED ; /最大化m_nCmdShow=SW_SHOWMINMIZED ; /最小化m_nCmdShow=SW_SHOWNORMAL ; /正常方式MDI窗口:如果是创建新的应用程序,可以用 MFC AppWizard 的Advanced 按钮并在MDI 子窗口风格组中检测最大化或最小化; 还可以重载 MDI Window 的PreCreateWindow函数,设置WS_MAXMIZE or WS_MINMIZE;如果从 CMDIChildWnd 派生,调用 OnInitialUpdate函数中的 CWnd:Show Window来指定 MDI Child Window的 风格。13. 如何使程序保持极小状态?很有意思的问题这么办: 在恢复程序窗体大小时, Windows 会发送WM_QUERY-OPEN 消息,用ClassWizard设置成员函数 OnQueryOpen() ,add following code:Bool CMainFrame: OnQueryOpen( )Return false;14. 如何限制窗口的大小?也就是 FixedDialog 形式。 Windows 发送 WM_GETMAXMININFO消息来跟踪, 响应它,在OnGetMAXMININFO 中写代码:15. 如何使窗口不可见?很简单,用SW_HIDE 隐藏窗口,可以结合 FindWindow,ShowWindow 控制.16. 如何使窗口始终在最前方?两种途径.BringWindowToTop(Han

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论