ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:74.21KB ,
资源ID:8217395      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8217395.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VC高手的经验总结vc实用小技巧.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

VC高手的经验总结vc实用小技巧.docx

1、VC高手的经验总结vc实用小技巧vc实用小技巧一、 一次只运行一个程序实例下列两种方式都可以实现,建议采用第二种方式:1、 if( FindWindow(NULL,程序标题) exit(0); 2、BOOL CDemoTBarEApp:InstanceIsRun() HANDLE m_hMutex; m_hMutex = :CreateMutex(NULL, TRUE, _T(YourApplication); ASSERT(m_hMutex); if (GetLastError() = ERROR_ALREADY_EXISTS) m_hMutex = NULL; return TRUE;/实

2、例已经运行 return FALSE;/实例未运行 二、 装载光标SetCursor(AfxGetApp()-LoadStandardCursor(IDC_WAIT);其中:SetCursor()是全局函数,用来设置整个例程的光标参数是宏定义光标句柄。AfxGetApp ()是一个系统函数,它返回当前的一个CWinApp对象。其成员函数LoadStandardCursor()用来读取一个系统指针,每一种系统指针的具体宏定义如下:IDC_APPSTARTING 带小沙漏的标准箭头IDC_ARROW 标准箭头IDC_CROSS 十字光标(用于定位)IDC_HAND Windows 2000:手型I

3、DC_HELP 带问号的箭头IDC_IBEAM I型标IDC_ICON Obsolete for applications marked version 4.0 or later. IDC_NO 禁止符号IDC_SIZE Obsolete for applications marked version 4.0 or later. Use IDC_SIZEALL. IDC_SIZEALL 十字箭头IDC_SIZENESW 指向东北和西南的双向箭头IDC_SIZENS 指向南和北的双向箭头IDC_SIZENWSE 指向西北和东南的双向箭头IDC_SIZEWE 指向东西的双向箭头IDC_UPARRO

4、W 上箭头IDC_WAIT 沙漏获得主框架: CM pMainframe = (CMainFrame *) AfxGetApp()-m_pMainWnd;.获取应用程序的实例句柄: Example: HANDLE hInstance=AfxGetInstanceHandle();获得应用程序主窗口的指针: Example: AfxGetMainWnd() -ShowWindow(SW_SHOWMAXMIZED); /使程序最大化四、重新建立字体的代码 if(m_fontLogo.m_hObject) m_fontLogo.Detach(); m_fontLogo.CreateFont(nHei

5、ght, 0, 0, 0, nWeight, bItalic, bUnderline,0,0,0,0,0,0, Name);五、用指定颜色填充区域 dc.FillSolidRect(rect, :GetSysColor(COLOR_3DFACE);六、绘制立体字体效果的字体,很值得一看void CTestView:OnPaint() CPaintDC dc(this); / device context for painting CRect rect; GetWindowRect(rect); CFont m_fontLogo; m_fontLogo.CreateFont(24, 0, 0,

6、0, FW_BOLD, true, FALSE,0,0,0,0,0,0, Arial); CString m_LogoText; m_LogoText=_T(Benlux Pro3D System); dc.SetBkMode(TRANSPARENT); CFont * OldFont = dc.SelectObject(&m_fontLogo); / draw text in DC COLORREF OldColor = dc.SetTextColor( :GetSysColor( COLOR_3DHILIGHT); rect.right = rect.Width(); rect.botto

7、m = rect.Height(); rect.left = rect.top = 0; dc.FillSolidRect(rect, :GetSysColor(COLOR_3DFACE); dc.DrawText( m_LogoText, rect + CPoint(1,1), DT_SINGLELINE | DT_LEFT | DT_VCENTER); dc.SetTextColor( :GetSysColor( COLOR_3DSHADOW); dc.DrawText( m_LogoText, rect, DT_SINGLELINE | DT_LEFT | DT_VCENTER); /

8、restore old text color dc.SetTextColor( OldColor); / restore old font dc.SelectObject(OldFont); / Do not call CView:OnPaint() for painting messages七、简单的消息检索和抽取函数,能够让系统响应其它操作BOOL PeekAndPump() static MSG msg; while (:PeekMessage(&msg,NULL,0,0,PM_NOREMOVE) if (!AfxGetApp()-PumpMessage() :PostQuitMessa

9、ge(0); return FALSE; return TRUE;八、在你的程序中用动画光标替换默认的等待光标 (ANI光标的使用) HCURSOR m_hAniCursor=NULL; BeginWaitCursor(); /begin wait cursor for api function /load ani cursor from file in current path TCHAR cursorPathMAX_PATH; GetModuleFileName(NULL,cursorPath,MAX_PATH); char drive_MAX_DRIVE; char dir_MAX_DI

10、R; char fname_MAX_FNAME; char ext_MAX_EXT; _splitpath(cursorPath, drive, dir, fname, ext ); sprintf(cursorPath,%s%swait.ani,drive,dir); /ani cursor file name is wait.ani m_hAniCursor= LoadCursorFromFile(cursorPath); HCURSOR oldCursor; if(m_hAniCursor != NULL) oldCursor=SetCursor(m_hAniCursor); for(l

11、ong i=0;iDrawtext (CString (This is a long string), CRect (10, 10, 80, 30), DT_LEFT | DT_END_ELLIPSIS); /Add ellpsis to middle of string if it does not fit pDC-DrawText (AfxgetApp () -m_pszhelpfilePath, CRect (10, 40, 200, 60), DT_LEFT | DT_PATH_ELLIPSIS);十一、如何实现一个橡皮区矩形(具有踪迹矩形并可移动、缩放的矩形) CRectTracke

12、r是一个很有用的类,可以通过调用CRectTracker: TrackRubberBand响应WM_LBUTTONDOWN消息来创建一个橡皮区矩形。下例表明使用CRectTracker移动和重置视窗中的蓝色椭圆的大小是很容易的事情。 首先,在文档类中声明一个CRectTracker数据成员:class CTestDoc: Public CDocumentpublic: CRectTracker m_tracker; 其次,在文档类的构造函数中初始化CRectTracker 对象:CTestDoc:CTestDoc() m_tracker.m_rect.SetRect (10, 10, 300,

13、 300); m_tracker.m_nStyle=CRectTracker: resizeInside | CRectTracker: dottedLine; 然后,在视图类的OnDraw函数中画椭圆和踪迹矩形:void CTestView:OnDraw(CDC* pDC) CTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);/Select blue brush into device context. CBrush brush (RGB (0, 0, 255); CBrush* pOldBrush=pDC-SelectObject (&br

14、ush); /draw ellipse in tracking rectangle. CRect rcEllipse; pDoc-m_tracker.GetTrueRect (rcEllipse); pDC-Ellipse (rcEllipse); /Draw tracking rectangle. pDoc-m_tracker.Draw (pDC); /Select blue brush out of device context. pDC-SelectObject(pOldBrush); 最后,视图类中处理WM_LBUTTONDOWN消息,并增加下述代码。该段代码根据鼠标击键情况可以拖放、

15、移动或者重置椭圆的大小。void CTestView:OnLButtonDown(UINT nFlags, CPoint point) /Get pointer to document. CTestDoc* pDoc=GetDocument(); ASSERT_VALID (pDoc); /If clicked on ellipse, drag or resize it. Otherwise create a /rubber-band rectangle nd create a new ellipse. BOOL bResult=pDoc-m_tracker.HitTest (point)!=

16、 CRectTracker:hitNothing; /Tracker rectangle changed so update views. if (bResult) pDoc-m_tracker.Track (this,point,TRUE); pDoc-SetModifiedFlag (); pDoc-UpdateAllViews (NULL); else pDoc-m_tracker.TrackRubberBand (this,point,TRUE); CView:OnLButtonDown(nFlags, point);十二、如何在临时目录创建一个临时文件如果你要在临时目录下创建临时文件

17、,下面的代码能帮到你的忙。bool GetuniqueTempName (CString& strTempName) strTempName=; /Get the temporary files directory. TCHAR szTempPath MAX_PATH; DWORD dwResult=: GetTempPath (MAX_PATH, szTempPath); if (dwResult=0) return false; /Create a unique temporary file. TCHAR szTempFileMAX_PATH; UINT nResult=GetTempFi

18、leName (szTempPath, _T (ex),0,szTempFile); if (dwResult=0) return false; strTempName=szTempFile; return true;十三、如何限制窗口的最小范围要限制窗体的大小,下面的代码能帮到你的忙。在CMainFrame中增加WM_GETMAXMININFO消息的处理函数,然后在这个函数中写代码如下:/限制主窗体的最小高度和宽度void CMainFrame:OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) lpMMI-ptMinTrackSize.x=600; lpMMI-p

19、tMinTrackSize.y=400; CNewFrameWnd:OnGetMinMaxInfo(lpMMI);十四、怎样删除文件到回收站中 要删除文件到回收站,很简单。只要用SHFileOperation函数就行了,下面的代码我将为你演示了这一个函数的用法。当然你可以直接拷贝到你的项目中。/删除文件到回收站中/pszPath : 待删除的全路径文件名/bDelete : TRUE 删除,不移到回收站,FALSE:移到回收站一、 /返回 : TRUE 删除成功 FALSE 删除失败BOOL CDelFileToRecycleDlg:Recycle(LPCTSTR pszPath, BOOL

20、bDelete/*=FALSE*/) SHFILEOPSTRUCT shDelFile; memset(&shDelFile,0,sizeof(SHFILEOPSTRUCT); shDelFile.fFlags |= FOF_SILENT; / dont report progress shDelFile.fFlags |= FOF_NOERRORUI; / dont report errors shDelFile.fFlags |= FOF_NOCONFIRMATION; / dont confirm delete / Copy pathname to double-NULL-termina

21、ted string. / TCHAR buf_MAX_PATH + 1; / allow one more character _tcscpy(buf, pszPath); / copy callers pathname buf_tcslen(buf)+1=0; / need two NULLs at end / Set SHFILEOPSTRUCT params for delete operation shDelFile.wFunc = FO_DELETE; / REQUIRED: delete operation shDelFile.pFrom = buf; / REQUIRED: w

22、hich file(s) shDelFile.pTo = NULL; / MUST be NULL if (bDelete) / if delete requested. shDelFile.fFlags &= FOF_ALLOWUNDO; / .dont use Recycle Bin else / otherwise. shDelFile.fFlags |= FOF_ALLOWUNDO; / .send to Recycle Bin return SHFileOperation(&shDelFile); / do it!十五、内存泄漏检查 也许你已经知道,在C+和C语言中指针问题也就是内存

23、申请与释放是一个令人头疼的事情,假如你申请了内存,但没有释放,并且你的程序需要长时间地运行,那么,系统的资源将逐渐减少,当系统的资源全部被用完时,系统将会崩溃。所以在开发程序的过程中一定要保证资源的完全释放。下面我们来介绍内存漏洞的检查。示例如下:/ do your memory allocations and deallocations. CString s = This is a frame variable;#ifdef _DEBUG CMemoryState oldMemState, newMemState, diffMemState; oldMemState.Checkpoint()

24、;#endif / the next object is a heap object CString* p = new CString( Smith Alan 581_0215 ); delete p; p=NULL;#ifdef _DEBUG newMemState.Checkpoint(); BOOL b=diffMemState.Difference(oldMemState, newMemState); if (b) AfxMessageBox( Memory leaked!n ); #endif 根据试验,由于我们无法释放掉象int CString char 申请的变量。只能释放指针型的变量。而检测内存时,照样会出现内存泄漏现象。所以,这种内存检测方式局限性还是很大。因为我们无法释放非指针型变量。CString,string,char*的综合比较(一) 概述string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C+标准之中;CString(typedef CStringTTCHAR, StrTraitMFC CString)为

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1