MFC学习总结3.docx_第1页
MFC学习总结3.docx_第2页
MFC学习总结3.docx_第3页
MFC学习总结3.docx_第4页
MFC学习总结3.docx_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

MFC学习总结(3)(转载) 2008-1-28 14:21:00 | By: Enzo 31. 如何在编辑控件中以追加的方式添入字符?问题提出SetDlgItemText可以向Edit控件中输入字符,发送更新的消息也可是Edit控件显示与其关联的变量的值,但若是向已有的Edit字符后追加字符,该如何做?程序实现建立名为My的对话框工程,添加一个Edit和一个Button控件.Edit的ID=IDC_EDIT1,Button的ID=IDC_BUTTON1.建立和IDC_BUTTON1的响应函数:OnButton1()void CMyDlg:OnButton1() CString pText=你好; CEdit *m_Edit=(CEdit *)GetDlgItem(IDC_EDIT1); int nLen=m_Edit-GetWindowTextLength(); m_Edit-SetFocus(); m_Edit-SetSel(nLen, nLen); m_Edit-ReplaceSel(pText); 在Edit控件中输入字符,想追加时按IDC_BUTTON1按钮.看看效果.32.属性页标题改名我用CPropertySheet创建属性页,用的CPropertyPage对象只有一个,也就是每个属性页的内容一样.现在的问题是:这样每个属性页的标题都是一样的,是对话框的标题!怎样动态的改变这个标题,使每个属性页的标签的名称都不同?CTabCtrl * pCtrl = pSheet-GetTabControl();TCITEM tc;tc.mask = TCIF_TEXT;tc.pszText = 新标题;pCtrl-SetItem(0,&tc);/0即是你要改的TAb的索引33. 怎样去掉属性页的Apply与Help按钮?/去掉Helpm_psh.dwFlags |= PSH_HASHELP ;m_psh.dwFlags &= PSH_HASHELP ;/除掉应用按钮m_psh.dwFlags|=PSH_NOAPPLYNOW; 34. 如何给树控件加入工具提示1.首先给树控件加入TVS_INFOTIP属性风格,如下所示:if (!m_ctrlTree.Create(WS_CHILD|WS_VISIBLE| TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS|TVS_INFOTIP, /加入提示TVS_INFOTIP,jingzhou xu(树控件ID:100)CRect(0, 0, 0, 0), &m_wndTreeBar, 100) TRACE0(Failed to create instant bar childn);return -1; 2.其次加入映射消息声明,如下所示:afx_msg void OnGetInfoTip(NMHDR* pNMHDR,LRESULT* pResult); /树控件上加入提示消息,jingzhou xuON_NOTIFY(TVN_GETINFOTIP, 100, OnGetInfoTip)/树控件条目上加入提示,jingzhou xu3.最后加入呼应涵数处理:void CCreateTreeDlg:OnGetInfoTip(NMHDR* pNMHDR, LRESULT* pResult) *pResult = 0;NMTVGETINFOTIP* pTVTipInfo = (NMTVGETINFOTIP*)pNMHDR;LPARAM itemData = (DWORD) pTVTipInfo-lParam;/对应每个条目的数据HTREEITEM hItem = pTVTipInfo-hItem;CString tip;HTREEITEM hRootItem = m_chassisTree.GetRootItem();if (hRootItem != pTVTipInfo-hItem)tip = 树结点的提示;elsetip = 树根上的提示;strcpy(pTVTipInfo-pszText, (LPCTSTR) tip);35. 如何在TreeList中加图标?问题提出请问treeview控件和treectrl控件的用法有何不同呢?向如何imagelist控件中加图象呀?解决方法1)HICON hicon8;m_imageList.Create(16,16,0,8,8);hicon0=AfxGetApp()-LoadIcon(IDI_ICON0);hicon1=AfxGetApp()-LoadIcon(IDI_ICON1);hicon2=AfxGetApp()-LoadIcon(IDI_ICON2);hicon3=AfxGetApp()-LoadIcon(IDI_ICON3);hicon4=AfxGetApp()-LoadIcon(IDI_ICON4);hicon5=AfxGetApp()-LoadIcon(IDI_ICON5);hicon6=AfxGetApp()-LoadIcon(IDI_ICON6);hicon7=AfxGetApp()-LoadIcon(IDI_ICON7);for(int n=0;nSetImageList(&m_imageList,TVSIL_NORMAL);2)CImageList cil1;cil1.Create(32,32,TRUE,2,2);cil1.Add(pApp-LoadIcon(IDI_DAO1);cil1.Add(pApp-LoadIcon(IDI_DAO2);cil1.Add(pApp-LoadIcon(IDI_DAO3);cil1.Add(pApp-LoadIcon(IDI_DAO4);cil1.Add(pApp-LoadIcon(IDI_DAO5);cil1.Add(pApp-LoadIcon(IDI_DAO6);cil1.Add(pApp-LoadIcon(IDI_DAO7);cil1.Add(pApp-LoadIcon(IDI_DAO8);cil1.Add(pApp-LoadIcon(IDI_DAO9);/设置图象列表m_list.SetImageList(&cil1,LVSIL_NORMAL);36. 如何双击列表框项启动一个与文件关联的程序?有人问我如何双击列表框项启动一个程序?其实这个问题很简单,Windows中有一个API函数可以打开任何类型的文件:ShellExecute(NULL,open,lpFileName,NULL,NULL,SW_SHOWNORMAL);参数 lpFileName 是文件的全路径名。用这个变量你可以传递象“C:MyExcelFile.xls”或者“”启动Excel程序或者浏览器程序。如果你只是想获取与文件关联的程序名,而不是要运行程序,那么调用:FindExecutable就可以了。37. 如何防止在listbox中添加很多数据出现不停的刷新?问题提出在listbox添加很多数据的时候,由于控件不停的刷新,导致出现闪烁,如何解决?解决方法再添加数据以前,禁止控件刷新,数据添加完毕以后,再刷新一次。程序实现(其中:m_ListBox是CListBox的控件类型的变量)m_ListBox.LockWindowUpdate();/禁止本listbox刷新。for(int i=0;iRedrawWindow(NULL,NULL,RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);38. 如何得到CListBox所选择项的String?问题提出如何得到CListBox所选择项的String解决方法用到:CListBox:GetText()程序实现CString scInfo; pList-GetText( GetCurSel(),scInfo);39. 用鼠标移动基于对话框的无标题栏程序的简单方法void CVCTestDlg:OnLButtonDown(UINT nFlags, CPoint point) /一句话解决问题 SendMessage(WM_SYSCOMMAND,0xF012,0);CDialog:OnLButtonDown(nFlags, point);40. 如何改变框对话或窗体视窗的背景颜色调用CWinApp : : SetDialogBkColor可以改变所有应用程序的背景颜色。第一个参数指定了背景颜色,第二个参数指定了文本颜色。下例将应用程序对话设置为蓝色背景和黄色文本。BOOL CSampleApp : : InitInstance ( )/use blue dialog with yellow text .SetDialogBkColor (RGB (0, 0, 255 ), RGB ( 255 , 255 , 0 ) ) ;需要重画对话(或对话的子控件)时,Windows向对话发送消息WM_CTLCOLOR,通常用户可以让Windows选择绘画背景的刷子,也可重置该消息指定刷子。下例说明了创建一个红色背景对话的步骤。首先,给对话基类增加一人成员变量CBursh :class CMyFormView : public CFormViewprivate :CBrush m_ brush ; / background brush ;其次, 在类的构造函数中将刷子初始化为所需要的背景颜色。CMyFormView : : CMyFormView ( )/ Initialize background brush .m_brush .CreateSolidBrush (RGB ( 0, 0, 255 ) )最后,使用ClassWizard处理WM_CTLCOLOR消息并返回一个用来绘画对话背景的刷子句柄。注意:由于当重画对话控件时也要调用该函数,所以要检测nCtlColor参量。HBRUSH CMyFormView : : OnCtlColor (CDC* pDC , CWnd*pWnd , UINT nCtlColor )/ Determine if drawing a dialog box . If we are , return +handle to/our own background brush . Otherwise let windows handle it .if (nCtlColor = = CTLCOLOR _ DLG )return (HBRUSH) m_brush .GetSafeHandle ( ) ;return CFormView : : OnCtlColor (pDC, pWnd , nCtlColor );41如何禁止对话框关闭按钮和浮动工具条上的系统菜单1、禁止对话框中的关闭按钮有二种方法。第一种方法,用ModiftMenu()涵数来实现:CMenu* pMenu = this-GetSystemMenu(FALSE);pMenu-ModifyMenu(SC_CLOSE,MF_BYCOMMAND | MF_GRAYED );第二种方法,用EnableMenuItem()涵数来实现:CMenu* pMenu = this-GetSystemMenu(FALSE);pMenu-EnableMenuItem( SC_CLOSE, MF_BYCOMMAND|MF_GRAYED);2、禁止浮动工具条上的系统菜单。新建一个CToolBar的派生类CxxToolBar,在新类中的左键双击(CxxToolBar:OnLButtonDblClk(.)和左键单击(CxxToolBar: OnLButtonDown(.)涵数中分别加入下面代码既可:if (IsFloating() /工具条正在浮动状态中 CWnd* pMiniFrame; CWnd* pDockBar; pDockBar = GetParent(); pMiniFrame = pDockBar-GetParent(); /去除其上系统菜单 pMiniFrame-ModifyStyle(WS_SYSMENU, NULL); /重绘工具条 pMiniFrame-ShowWindow(SW_HIDE); pMiniFrame-ShowWindow(SW_SHOW);3、禁止窗口最大化按钮在PreCreateWindow()涵数中去掉WS_MAXIMIZEBOX风格显示既可。BOOL CxxFrameWnd:PreCreateWindow(CREATESTRUCT& cs)cs.style &= WS_MAXIMIZEBOX;return CFrameWnd:PreCreateWindow(cs);42如何拷贝一个工程的对话框资源到另一个工程中?有两种方法可以实现:1)你可以直接拷贝resource,用VC+以文本的方式或者直接用文本编辑器打开.rc文件,将有关的片段从一个工程拷贝到另一个工程.你可以通过查找如下字样的片段(此片段用来定义对话框资源)来拷贝你要的部分:IDD_MYDIALOG_ID DIALOG DISCARDABLE 0, 0, 235, 55这里的IDD_MYDIALOG_ID是你的对话框的ID,将到此片段结尾的部分全拷下来,通常你还要给新的工程加一个ID(通过DevStudio的工具或者直接修改resource.h文件).2)可以通过DevStudio的copy/paste功能.首先,在编辑器以auto模式打开.rc文件,这时resource正确的显示出来.然后,选中要拷贝的对话框的ID,在Edit菜单里选Copy或者按住Ctrl+C.然后打开目标resource文件,在Edit菜单里选Paste或者按住Ctrl+V.43如何实现点一下对话框外面的区域,自动隐藏对话框?问题提出如果想在点击对话框外面的地方使得对话框关闭,该如何做?解决方法试试下面的代码,原理是在激活对话框时,捕获鼠标的动作,当鼠标点击时判断是否点击在对话框外,是的话就释放对话框.程序实现建立名为My的对话框程序.实现如下步骤:在MyDlg.h中加入:class CShowWindow1Dlg : public CDialog / Construction public: int m_cx; int m_cy; .;在MyDlg.cpp中:/定义消息映象,处理鼠标单击及激活BEGIN_MESSAGE_MAP(CMyDlg, CDialog)/AFX_MSG_MAP(CMyDlg)ON_WM_LBUTTONDOWN()ON_WM_ACTIVATE()/AFX_MSG_MAPEND_MESSAGE_MAP()void CMyDlg:OnLButtonDown(UINT nFlags, CPoint point)CRect rect;GetClientRect(&rect);rect.InflateRect(m_cx, m_cy);/Release dialog if the user click outside it.if(!rect.PtInRect(point) EndDialog(IDCANCEL);CDialog:OnLButtonDown(nFlags, point);void CMyDlg:OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)CDialog:OnActivate(nState, pWndOther, bMinimized);if( nState = WA_ACTIVE | nState = WA_CLICKACTIVE)SetCapture();elseReleaseCapture();BOOL CMyDlg:OnInitDialog()CDialog:OnInitDialog();.OSVERSIONINFO info;memset(char*)&info, 0, sizeof(OSVERSIONINFO);info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);if(GetVersionEx(&info)/we dont run on Win32s, so check only two values if(info.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS) /On windows 95m_cx = GetSystemMetrics(SM_CXFIXEDFRAME);m_cy = GetSystemMetrics(SM_CYFIXEDFRAME); else /On NTm_cx = GetSystemMetrics(SM_CXDLGFRAME);m_cy = GetSystemMetrics(SM_CYDLGFRAME); 说明: 1)WM_ACTIVATE消息在ClassWizard中没有,按如下步骤添加,右击CMyDlg类,选Add Windows Message Handle,接着在Filter for messages available to中选Window,在New Windows messages/events列表中就会出现WM_ACTIVATE,选中,点击Add Handler 2)SM_CXDLGFRAME,SM_CYDLGFRAME NT中取得有WS_DLGFRAMEstyle风格的窗口的高和宽 95中已经废弃而采用SM_CX_FIXEDFRAME和SM_CYFIXEDFRAME44. 初始化应用程序的大小如果想使应用程序界面(文档)在开始运行是按你的尺寸展现在屏幕上,添加代码如下:BOOL CMainFrame:PreCreateWindow(CREATESTRUCT& cs)int xsize=:GetSystemMetrics(SM_CXSCREEN);int ysize=:GetSystemMetrics(SM_CYSCREEN);cs.cx=xsize*5/10;cs.cy=ysize*5/10;cs.x=(xsize-cs.cx)/2;cs.y=(ysize-cs.cy)/2; 其中的5/10是你的初始界面占屏幕的百分比,可以自己修改。如果想使应用程序大小固定添加cs.style&=WS_THICKFRAME;45. 如何得到视图指针?问题提出现在你有一个多线程的Demo,你想在多线程里处理视图指针里的函数,我们给这个函数起个名字:Put();该如何实现呢? /有两种方法可以实现你的要求: /1)第一种方法: /要是多线程不是在App.cpp里出现,那么要在多线程的.cpp中加上extern CYourApp theApp; /获得文档模板: POSITION curTemplatePos = theApp.GetFirstDocTemplatePosition(); CDocTemplate *m_doc=theApp.GetNextDocTemplate(curTemplatePos); /获得文档: curTemplatePos=m_doc-GetFirstDocPosition(); CYourDoc *m_pdoc=(CA8Doc*)m_doc-GetNextDoc(curTemplatePos); /获得视图: curTemplatePos=m_pdoc-GetFirstViewPosition(); CYourView *m_pview=(CYourView*)m_pdoc-GetNextView(curTemplatePos); /调用视图函数: m_pview-Put(); /2)第二种方法: /获得窗体指针: CMainFrame *pFrame = (CMainFrame*)AfxGetApp()-m_pMainWnd; /获得与该窗体符合的视图: CYourView *m_pView = (CYourView *) pFrame-GetActiveView(); /调用视图函数: m_pView-Put();46. 如何使我的程序在启动时不创建一个新文档?问题如何使我的程序在启动时不创建一个新文档? 解答在程序的InitInstance中的ProcessShellCommand函数之前加入: cmdInfo.m_nShellCommand = CCommandLineInfo:FileNothing47. 如何将标题栏上的右键菜单屏蔽掉?解决方法右键菜单是系统菜单,只要将其WS_SYSMENU的属性去掉即可.程序实现int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct) . long style = GetWindowLong(m_hWnd, GWL_STYLE); style &= WS_SYSMENU; SetWindowLong(m_hWnd, GWL_STYLE, style); return 0;48如何全屏显示(没有标题,没有菜单,没有工具条)解决方法重载CMainFrame的ActivateFrame函数:void CMainFrame:ActivateFrame(int nCmdShow) CRect cRectdesktop; WINDOWPLACEMENT windowplacement; :GetWindowRect(:GetDesktopWindow(),&cRectdesktop); :AdjustWindowRectEx(&cRectdesktop,GetStyle(),TRUE,GetExStyle(); windowplacement.rcNormalPosition=cRectdesktop; windowplacement.showCmd=SW_SHOWNORMAL; SetWindowPlacement(&windowplacement); CFrameWnd:ActivateFrame(nCmdShow);49如何设置有背景颜色的文本(1)解决方法用到了CDC:SetBkMode();程序实现 void CMyView:OnDraw(CDC* pDC) CMyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CRect rcView;/加這兩句 GetClientRect(rcView); / TODO: add draw code for native data here CString str (_T(Perfect Text); pDC-SetBkMode(TRANSPARENT); rcView.OffsetRect (1,1); pDC-SetTextColor(RGB (0,0,0); pDC-DrawText(str,str.GetLength(),rcView,DT_SINGLELINE | DT_CENTER | DT_VCENTER); rcView.OffsetRect(-1,-1); pDC-SetTextColor(RGB (255,0,0); pDC-DrawText(str,str.GetLength(),rcView,DT_SINGLELINE | DT_CENTER | DT_VCENTER); (2) 建立名为My的SDI或MDI,并响应WM_ERASEBKGND.BOOL CMyView:OnEraseBkgnd(CDC* pDC) / TODO: Add your message handler code here and/or call default CBrush Brush (RGB(114,147,171); / Select the brush into the device context . CBrush* pOldBrush = pDC-SelectObject(&Brush); / Get the area that needs to be erased . CRect ViewClip; pDC-GetClipBox(&ViewClip); /Paint the area. pDC-PatBlt(ViewClip.left,ViewClip.top,ViewClip.Width(),ViewClip.Height(),PATCOPY); /Unselect brush out of device context . pDC-SelectObject (pOldBrush ); / Return nonzero to half fruther processing . return TRUE; return CView:OnEraseBkgnd(pDC);此方法也适合基类是EditView的SDI或MDI的情况,但是字体的颜色和底色不行.建议用WM_CTLCOLOR.50串太长时往让其末尾显示一个省略号(在SDI或MDI的View中)问题提出如何在串太长时往让其末尾显示一个省略号(在SDI或MDI的View中)?程序实现建立名为My的SDI或MDI工程.void CMyView:OnDraw(CDC* pDC) CMyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); / TODO: add draw code for native data here pDC-DrawText(CString(Its a long string,so we will add a . at the end.),CRect (110, 110, 180, 130),DT_LEFT | DT_END_ELLIPSIS); /Add ellpsis to middle of string if it does not fit pDC-DrawText(CString(Its a long string,so we will add a . at the end.),CRect (110, 140, 300, 160),DT_LEFT | DT_PATH_ELLIPSIS); 51. 如何获得其他程序的图标,并显示在View中问题提出有的时候,如:类资源管理器会遇到获得程序图标并显示的操作,如何实现呢?解决方法SDK函数SHGetFileInfo来获得有关文件的很多信息:如大小图标,属性,类型等. 程序实现建立名为My的SDI工程.在OnPaint()函数中加入:void CMyView:OnPaint() CPaintDC dc(this); / device context for painting HICON hIcon=: ExtractIcon(AfxGetInstanceHandle(),_T(NotePad.exe),0); if (hIcon & hIcon!=(HICON)-1) dc.DrawIcon(10,10,hIcon); / TODO: Add your message handler code here / Do not call CView:OnPaint() for painting messages说明:_T(NotePad.exe)指的是要获得什么程序的图标.或者在OnDraw()中(此时必须保证没有OnPaint()函数,想想为何?)void CMyView:OnDraw(CDC* pDC) CMyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); / TODO: add draw code for native data here HICON hIcon=: ExtractIcon(AfxGetInstanceHandle(),_T(NotePad.exe),0); if (hIcon &hIcon!=(HICON)-1) pDC-DrawIcon(10,10,hIcon); 52 .RichEdit在Dialog(FormView中打开)中加入CRichEdit控件后,这个dialog 为什么打不开如何处理?解决方法在函数:InitInstance的第一句加入AfxInitRichEdit();53. 如何使FormView中显示dialog时,不是凹的?问题提出为什么FormView中显示dialog时,是凹的,能不能不这样解决方法在Dialog的属性中:增加属性WS_BORDER 或者 WS_EX_WINDOWEDGE用程序实现:pView-ModifyStyle(,WS_BORDER) 或者pView-ModifyStyleEx(,WS_EX_WINDOWEDGE )54. 如何改变窗口标题?问题提出在应用程序的不同运行时期,要反映当前状态往往会修改应用程序标题.解决方法在MFC类库中提供了CWnd:SetWindowText函数,通过该函数可以改变任何窗体(包括控件)的标题.改变主窗体的标题:CWnd *m_pMainWnd;m_pMainWnd=AfxGetMainWnd();m_pMainWnd-SetWindowText(_T(改变标题);当改变多视MDI的子窗口的标题时,用:GetParentFrame()-SetWindowText(_T(MDI Child改变标题);当改变按钮的标题时(假设按钮的ID=IDC_BUTTON1):GetDlgItem(IDC_BUTTON1)-SetWindowText(_T(Button 改变标题);运行看看.55.图标透明(1).Windows中的图标其实是有两个图像组成的,其中一个用于与它要显示的位置的图像做“AND”操作,另一个作“XOR”操作。透明:用“白色”AND,用“黑色”XOR反色:用“白色”AND,用“白色”XOR正常色:用“黑色”AND,用正常颜色XOR.(2). WIN9X中好像是对像素的操作实现透明的WIN2K中就有API直接实现透明了!WIN2K中GetWindowLongSetWindowLongSetLayeredWindowAttributes三个API就可以实现透明了!(3) :DrawIconEx(pDC-GetSafeHdc(),point.x,point.y,icon,icosize,icosize,0,NULL,DI_NORMAL);56.ASSERT()是干什么用的ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。例如,变量n在程序中不应该为0,如果为0可能导致错误,你可以这样写程序: . ASSERT( n != 0); k = 10/ n; . ASSERT只有在Debug版本中才有效,如果编译为Release版本则被忽略。 assert()的功能类似,它是ANSI C标准中规定的函数,它与ASSERT的一个重要区别是可以用在Release版本中。56. 将RADIO控件初始状态设置成为选中1、在OnInitialDialog中用CButton:CheckRadioButton(.)2、在OnInitialDialog中用CButton:SetCheck(.)3、关联一个整型值,在构造函数中设为0。57.获得视图CFrameWnd* pFrameWnd = (CFrameWnd*)theApp.GetMainWnd();CMyView* pView = (CMyView*)pFrameWnd-GetActiveView();58如何得到屏幕的真实尺寸问题提出我的屏幕是1024*800,如何得到屏幕的真实大小,我用GetSystemMetrics(SM_CYFULLSCREEN)得到的高度总是小于800问题解答GetSystemMetrics(SM_CYFULLSCREEN)得到的只是屏幕用户区的大小。要得到屏幕的真实大小需要使用GetDeviceCaps函数,该API函数原型是这样的:int GetDeviceCaps(HDC hdc, / handle to DCint nIndex / index of capability);/得到屏幕尺寸的代码如下void CMyDlg:OnPaint() CPaintDC dc(this); int cx = :GetDeviceCaps(dc.m_hDC,HORZRES);/得到宽度 int cy = :GetDeviceCaps(dc.m_hDC,VERTRES);/得到高度 CDialog:OnPaint();59. 修改标题栏高度NONCLIENTMETRICS nm调用SystemParametersInfo(SPI_GETNONCLIENTMETRICS,sizeof(nm),&nm,0)重设SystemParametersInfo(SPI_SETNONCLIENTMETRICS,sizeof(nm),&nm,0)60. 如何实现“气球式”工具提示。本程序介绍一个与CToolTipCtrl相似的类CTooolTipWnd。 使用该类的方法如下: 1. 增加ToolTipWnd.cpp到工程文件。 2. 在头文件中添加i nclude ToolTipWnd.h 。3. 在类声明中添加: CToolTipWnd m_BalloonToolTip; 4. 在OnInitDialog(对话框)或OnInitialUpdate(表单视)中添加下面代码: m_BalloonToolTip.Create(this); m_BalloonToolTip.AddTool(GetDlgItem(), , text color); eg. m_BalloonToolTip.AddTool(GetDlgItem(IDC_EDIT1),Tooltip, RGB(255,0,0); 第三个参数为可选,缺省为RGB(0, 0, 0)。缺省文本颜色可以用SetDefTextColor进行设置。 4. 重载PreTranslateMessage并添加下面代码: if(m_BalloonToolTip)m_BalloonToolTip.RelayEvent(pMsg);61. dlg 上建立View的方法:OnInitDialog()CDialog:;OnInitDialog();CRect rectWindows;GetWinodwRect(&rectWindows);CRuntimeClass *pViewClass=RUNTIME_CLASS(CXXXView);CCreateContext *pContext=new CCreateContext;pContext-m_pCurrentDoc=NULL;pContext-m_pCurrentFrame=NULL;pContext-m_pLastView=NULL;pContext-m_pNewDocTemplate=NULL;pContext-m_pNewViewClass=pViewClass;CWnd *pWnd=DYNAMIC_DOWNCAST(CWnd,pviewClass-CreateObject();pWnd-Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,CRect(0,0,0,0),this,pContext);delete pContext;CXXXView *pView=DYUNAMIC_DOWNCAST(CXXXView,pWnd);.62. 窗口最大化、最小化及关闭的消息是什么?如何截获?最大化、最小化将发送WM_SYSCOMMAND消息。要处理该消息,可以这么做: 1、在Form的头文件中添加: void _fastcall RestrictMinimizeMaximize(TMessage &Msg); BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_SYSCOMMAND, TMessage, RestrictMinimizeMaximize) END_MESSAGE_MAP(TForm) 2、在Form的单元文件中添加: void _fastcall TForm1:RestrictMinimizeMaximize(TMessage&

温馨提示

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

评论

0/150

提交评论