vc常用技巧总结

上传人:桔**** 文档编号:564422783 上传时间:2022-10-24 格式:DOC 页数:45 大小:129.50KB
返回 下载 相关 举报
vc常用技巧总结_第1页
第1页 / 共45页
vc常用技巧总结_第2页
第2页 / 共45页
vc常用技巧总结_第3页
第3页 / 共45页
vc常用技巧总结_第4页
第4页 / 共45页
vc常用技巧总结_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《vc常用技巧总结》由会员分享,可在线阅读,更多相关《vc常用技巧总结(45页珍藏版)》请在金锄头文库上搜索。

1、vc常用技巧总结 (1) 如何通过代码获得应用程序主窗口的 指针?主窗口的 指针保存在CWinThread:m_pMainWnd中,调用AfxGetMainWnd实现。AfxGetMainWnd() -ShowWindow(SW_SHOWMAXMIZED)/使程序最大化.(2) 确定应用程序的路径Use GetModuleFileName 获得应用程序的路径,然后去掉可执行文件名。Example:TCHARexeFullPathMAX_PATH / MAX_PATH在API中定义了吧,好象是128GetModuleFileName(NULL,exeFullPath,MAX_PATH)(3) 如

2、何在程序中获得其他程序的 图标?两种方法:(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,s

3、tFileInfo.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、较考究的程序,考虑应该全面点.(4) 获得各种目录信息Windows目录: Use GetWindowsDirectoryWindows下的system目录: Use GetSystemDirectorytemp目录: Use GetTempPath当前目录: Use GetCurrentDirectory请注意前两个函数的第一个参数为目录变量名,后一个为缓冲区后两个相反.(5) 如何自定义消息1) 手工定义消息,可以这么写#define WM_MY_MESSAGE(WM_USER+100),MS 推荐的至少是 WM_USER+100(2)写消息处理函数,用WPARAM,LPARAM返回LRE

5、SULT.LRESULT CMainFrame:OnMyMessage(WPARAM wparam,LPARAM lParam)temp目录: Use GetTempPath/加入你的处理函数 irectory(6) 如何改变窗口的图标?向窗口发送 WM_SECTION消息。Example:HICON hIcon=AfxGetApp() -LoadIcon(IDI_ICON)ASSERT(hIcon)AfxGetMainWnd() -SendMessage(WM_SECTION,TRUE,(LPARAM)hIcon)(7) 如何改变窗口的缺省风格?重载 CWnd: PreCreateWindo

6、w 并修改CREATESTRUCT结构来指定窗口风格和其他创建信息.Example: Delete Max Button and Set OriginalWindows Position and SizeBOOL CMainFrame: PreCreateWindow(CREATESTRUCT &cs)cs.style &=WS_MAXINIZEMOXcs.x=cs.y=0cs.cx=GetSystemMetrics(SM_CXSCREEN/2)cs.cy=GetSystemMetrics(SM_CYSCREEN/2)return CMDIFramewnd :PreCreateWindow(c

7、s)(8) 如何将窗口居中显示?Call Function CWnd:Center WindowsExample(1):Center Window( ) /Relative to its parent/ Relativeto ScreenExample(2):Center Window(CWnd: GetDesktopWindow( )/Relative toApplications MainWindowAfxGetMainWnd( ) -Center Window( )(9) 如何让窗口和 MDI窗口一启动就最大化和最小化?先说窗口。在 InitStance 函数中设定 m_nCmdShow

8、的取值.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 Wi

9、ndow的风格。(10) 如何限制窗口的大小?也就是 FixedDialog形式。 Windows发送 WM_GETMAXMININFO消息来跟踪, 响应它,在 OnGetMAXMININFO 中写代码:(11) 如何使窗口不可见?很简单,用SW_HIDE 隐藏窗口,可以结合 FindWindow,ShowWindow控制.(12) 如何创建一个字回绕的CEditView重载CWnd : : PreCreateWindow和修改CREATESTRUCT结构,关闭CEditView对象的ES_AUTOHSCROLL和WS_HSCROLL风格位, 由于CEditView : : PreCreate

10、Window显示设置cs. style,调用基类函数后要修改cs . style。BOOL CSampleEDitView : : PreCreateWindow (CREATESTRUCT&cs)/First call basse class function .BOOL bResutl =CEditView : : PreCreateWindow (cs)/ Now specify the new window style .cs.style &= (ES_AUTOHSCROLL WS_HSCROLL)return bResult(13) 如何使程序保持极小状态?这么办: 在恢复程序窗体大

11、小时,Windows会发送WM_QUERY-OPEN消息,用 ClassWizard设置成员函数OnQueryOpen() ,add following code:Bool CMainFrame: OnQueryOpen( )Return false(14) 移动窗口调用CWnd : : SetWindowPos并指定SWP_NOSIZE标志。目的位置与父窗口有关(顶层窗口与屏幕有关)。调用CWnd : : MoveWindow时必须要指定窗口的大小。/Move window to positoin 100 , 100 of its parent window .SetWindowPos (N

12、ULL, 100 , 100 , 0 , 0 , SWP_NOSIZE SWP_NOAORDER)(15) 通用控件的显示窗口MFC提供了几个CView派生的视窗类, 封装了通用控件的功能,但仍然使用工作框文档显示窗口体系结构:CEditView封装了编辑控件,CTreeView保持了树列表控件,CListView封装了列表显示窗口控件,CRichEditView可以处理多种编辑控件。(16) 重置窗口的大小调用CWnd: : SetWindowPos并指定SWP_NOMOVE标志, 也可调用CWnd : : MoveWindow 但必须指定窗口的位置。/ Get the size of th

13、e window .Crect reWindowGetWindowRect (reWindow )/Make the window twice as wide and twice as tall .SetWindowPos (NULL , 0 , 0 , reWindow . Width ( ) *2,reWindow . Height () * 2,SWP_NOMOVE SWP_NOZORDER )(17) 如何单击除了窗口标题栏以外的区域使窗口移动当窗口需要确定鼠标位置时Windows向窗口发送WM_NCHITTEST信息,可以处理该信息使Windows认为鼠标在窗口标题上。对于对话框和基

14、于对话的应用程序,可以使用ClassWizard处理该信息并调用基类函数, 如果函数返回HTCLIENT 则表明鼠标在客房区域,返回HTCAPTION表明鼠标在Windows的标题栏中。UINT CSampleDialog : : OnNcHitTest (Cpoint point )UINT nHitTest =Cdialog: : OnNcHitTest (point )return (nHitTest = =HTCLIENT)? HTCAPTION : nHitTest上述技术有两点不利之处,其一是在窗口的客户区域双击时,窗口将极大;其二, 它不适合包含几个视窗的主框窗口。还有一种方法,

15、当用户按下鼠标左键使主框窗口认为鼠标在其窗口标题上,使用ClassWizard在视窗中处理WM_LBUTTODOWN信息并向主框窗口发送一个WM_NCLBUTTONDOWN信息和一个单击测试HTCAPTION。void CSampleView : : OnLButtonDown (UINT nFlags , Cpoint point)CView : : OnLButtonDow (nFlags , pont )/Fool frame window into thinking somene clickedonits caption bar .GetParentFrame ( ) PostMessage (WM_NCLBUTTONDOWN ,HTCAPTI

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号