VC++界面编程总结参考模板_第1页
VC++界面编程总结参考模板_第2页
VC++界面编程总结参考模板_第3页
VC++界面编程总结参考模板_第4页
VC++界面编程总结参考模板_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、VC+界面编程总结 分类: VC+编程技术 2008-12-31 12:22 26466人阅读 评论(0) 收藏 举报 1 / 15一、改变视图背景色:在CView的OnDraw函数中添写如下一段程序代码:voidCFileNameView:OnDraw(CDCpDC)CFileNameDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);CRectrectClient;CBrushbrushBkColor;GetClientRect(rectClient);brushBkColor.CreateSolidBrush(RGB(255,0,0);/颜色设置pDC-D

2、PtoLP(rectClient);pDC-FillRect(rectClient,&brushBkColor);二、往基于对话框的程序添加菜单:1先添加菜单(IDR_MENU1)资源,并加上需要的菜单项。2编辑对话框资源IDD_DLGMENUTOOLBAR_DIALOG的属性,在属性对话框中选择IDR_MENU1即可。3假如您不希望在对话框属性中直接设置菜单,而通过代码在程序中动态生成可以采用如下方法:在CFileNameDlg类声名中添加成员变量CMenum_menu,再在CFileNameDlg:OnInitDialog()中添加如下代码:/加载菜单m_menu.LoadMenu(IDR

3、_MENU1);/设置当前菜单SetMenu(&m_menu);/当你不需要菜单时可以用SetMenu(NULL);来取消当前菜单三、往基于Dialog的程序添加工具栏:1先添加工具栏(IDR_TOOLBAR1)资源,并画好各个按钮。2在CFileNameDlg类声名中添加成员变量CToolBarm_wndtoolbar;3在CFileNameDlg:OnInitDialog()中添加如下代码/添加一个平面工具条if(!m_wndtoolbar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_ALIGN_TOP|CBRS_GRIPPER|

4、CBRS_TOOLTIPS,CRect(4,4,0,0)|!m_wndtoolbar.LoadToolBar(IDR_TOOLBAR1)TRACE0(failedtocreatetoolbar/n);returnFALSE;m_wndtoolbar.ShowWindow(SW_SHOW);RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);四、改变对话框背景色:在CDlgMenuToolbarDlg:OnPaint()中修改代码实现Dialog填充颜色:CPaintDCdc(this);CRectrect;Get

5、ClientRect(rect);dc.FillSolidRect(rect,RGB(60,110,170);方法二、在InitInstance()(不是OnInitDialog())中加入:SetDialogBkColor(RGB(255,0,0),RGB(0,255,0);注意:要放在InitInstance函数的最前面!五、为dialog的工具栏添加工具提示:1在CFileNameDlg类定义中手工添加消息映射函数的定义,如下黑体部分/AFX_MSG(CFileNameDlg)virtualBOOLOnInitDialog();afx_msgvoidOnPaint();afx_msgBO

6、OLOnToolTipText(UINT,NMHDR*pNMHDR,LRESULT*pResult);/AFX_MSGDECLARE_MESSAGE_MAP()2在CFileNameDlg.cpp添加函数的实现代码/工具栏提示BOOLCFileNameDlg:OnToolTipText(UINT,NMHDR*pNMHDR,LRESULT*pResult)ASSERT(pNMHDR-code=TTN_NEEDTEXTA|pNMHDR-code=TTN_NEEDTEXTW);/UNICODE消息TOOLTIPTEXTA*pTTTA=(TOOLTIPTEXTA*)pNMHDR;TOOLTIPTEXT

7、W*pTTTW=(TOOLTIPTEXTW*)pNMHDR;/TCHARszFullText512;CStringstrTipText;UINTnID=pNMHDR-idFrom;if(pNMHDR-code=TTN_NEEDTEXTA&(pTTTA-uFlags&TTF_IDISHWND)|pNMHDR-code=TTN_NEEDTEXTW&(pTTTW-uFlags&TTF_IDISHWND)/idFrom为工具条的HWNDnID=:GetDlgCtrlID(HWND)nID);if(nID!=0)/不为分隔符strTipText.LoadString(nID);strTipText=st

8、rTipText.Mid(strTipText.Find(/n,0)+1);#ifndef_UNICODEif(pNMHDR-code=TTN_NEEDTEXTA)lstrcpyn(pTTTA-szText,strTipText,sizeof(pTTTA-szText);else_mbstowcsz(pTTTW-szText,strTipText,sizeof(pTTTW-szText);#elseif(pNMHDR-code=TTN_NEEDTEXTA)_wcstombsz(pTTTA-szText,strTipText,sizeof(pTTTA-szText);elselstrcpyn(p

9、TTTW-szText,strTipText,sizeof(pTTTW-szText);#endif*pResult=0;/使工具条提示窗口在最上面:SetWindowPos(pNMHDR-hwndFrom,HWND_TOP,0,0,0,0,SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);returnTRUE;returnTRUE;3在CFileNameDlg.cpp中添加消息映射,请看如下代码中的黑体部分BEGIN_MESSAGE_MAP(CFileNameDlg,CDialog)/AFX_MSG_MAP(CFileNameDl

10、g)ON_WM_PAINT()ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTipText)/AFX_MSG_MAPEND_MESSAGE_MAP()4在CFileNameDlg.h中添加声明:BOOLCFileNameDlg:OnToolTipText(UINT,NMHDR*pNMHDR,LRESULT*pResult);六、给没有工具栏的窗口添加工具栏:在资源管理器中编辑工具栏,并将其属性改为IDR_MAINFRAME,然后在MainFrm.h中声明:CToolBarm_wndToolBar;在MainFrm.cpp中添加:intCMainFrame:OnCreate

11、(LPCREATESTRUCTlpCreateStruct)m_wndToolBar.Create(this);m_wndToolBar.LoadToolBar(IDR_MAINFRAME);;停靠工具栏:在刚才添加的后面加入下面代码:m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle()|CBRS_TOOLTIPS|CBRS_SIZE_DYNAMIC);m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToo

12、lBar);/控制是否开启任意停靠完善一下功能:在菜单中添加一项“工具栏”,ID设为ID_VIEW_TOOLBAR,一切OK,试试吧!七、创建分隔窗口:只有框架类可以创建分隔,分隔可以嵌套。在.h文件中声明CSplitterWndm_wndSplitter;并且包含COneView.h(新建视图类)和CWinFrame.h(新建框架类)文件;然后在.cpp文件中加入:BOOLCMainFrame:OnCreateClient(LPCREATESTRUCTlpcs,CCreateContext*pContext)if(!m_wndSplitter.CreateStatic(this,1,2)re

13、turnFALSE;if(!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(COneView),CSize(240,420),pContext)returnFALSE;if(!m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CWinFrame),CSize(300,500),pContext)returnFALSE;returnTRUE;当用户创建好分割窗口后,有时并不希望通过拖动切分条来调节窗口的大小。这时就必须锁定切分条。锁定切分条的最简单的方法莫过于不让CSplitterWnd来处理WM_LBUTTONDOWN,

14、WM_MOUSEMOVE,WM_SETCURSOR消息,而是将这些消息交给CWnd窗口进行处理,从而屏蔽掉这些消息。拿WM_LBUTTONDOWN处理过程来说。修改为如下:voidCXXSplitterWnd:OnLButtonDown(UINTnFlags,CPointpoint)CWnd:OnLButtonDown(nFlags,point);其余的处理方法类似。八、“打开”按钮的设置:用类向导创建该按钮的click函数,选择默认值OnOpen,加入以下代码:voidCYourDlg:OnOpen()charszFileFilter=BINFile(*.bin)|*.bin|AllFile

15、(*.*)|*.*|;/文件类型过滤CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);/*CFileDialogdlg(FALSE);dlg.m_ofn.lpstrFilter=_T(文本文件(*.txt)*.txt所有文件(*.*)*.*);dlg.m_ofn.lpstrDefExt=_T(txt);*/if(dlg.DoModal()=IDOK)m_path=dlg.GetPathName();/将显示路径的Edit控件命名为m_path,并增加CString变量m_pathUpdateData(FALSE);九、窗口

16、居中:在初始化(OnInit)函数中增加:CenterWindow();即可十、对话框加状态条:UINTindicators=ID_INITMESSAGE,ID_SEPARATOR,ID_TIMEMESSAGE,ID_PROGRESS;m_statusbar.CreateEx(this,0,WS_CHILD|WS_VISIBLE|CBRS_BOTTOM);m_statusbar.SetIndicators(indicators,4);m_statusbar.ShowWindow(SW_SHOW);RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_C

17、ONTROLBAR_LAST,0);十一、设置初始窗口状态:BOOLCObjectNameApp:InitInstance()m_pMainWnd-SetWindowText();/设置初始窗口标题文本m_pMainWnd-ShowWindow(SW_SHOWMAXIMIZED);/设置初始窗口为最大化m_pMainWnd-UpdateWindow();对于MDI函数SetWindowText无效,主窗口的标题只能在资源列表中修改,子窗口标题在*doc.cpp中重载OnNewDocument(),调用SetTitle(LGdownload中文版);来修改。设置初始窗口最大化的另一优化方法:vo

18、idCMainFrame:ActivateFrame(intnCmdShow)/TODO:Addyourspecializedcodehereand/orcallthebaseclassnCmdShow=SW_MAXIMIZE;CFrameWnd:ActivateFrame(nCmdShow);十二、对话框透明特效:在OnInitDialog()中加入以下代码:/加入WS_EX_LAYERED扩展属性SetWindowLong(this-GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this-GetSafeHwnd(),GWL_EXSTYLE)0x80000)

19、;HINSTANCEhInst=LoadLibrary(User32.DLL);if(hInst)typedefBOOL(WINAPI*MYFUNC)(HWND,COLORREF,BYTE,DWORD);MYFUNCfun=NULL;/取得SetLayeredWindowAttributes函数指针fun=(MYFUNC)GetProcAddress(hInst,SetLayeredWindowAttributes);if(fun)fun(this-GetSafeHwnd(),0,128,2);FreeLibrary(hInst);注意:fun的参数128不能太小,否则就完全透明了!十三、设置

20、对话框里的STATIC控件颜色属性:在该对话框增加WM_CTLCOLOR事件,加入以下代码:if(nCtlColor=CTLCOLOR_STATIC)pDC-SetTextColor(RGB(255,255,255);pDC-SetBkColor(RGB(91,145,244);pDC-SetBkMode(TRANSPARENT);/设置透明设置STATIC控件背景透明:if(nCtlColor=CTLCOLOR_STATIC)pDC-SetBkMode(TRANSPARENT);/设置透明return(HBRUSH):GetStockObject(NULL_BRUSH);十四、使窗口的最大化

21、和最小化按钮消失:在PreCreateWindow函数中添加以下代码即可:intxSize=:GetSystemMetrics(SM_CXSCREEN);intySize=:GetSystemMetrics(SM_CYSCREEN);cs.cx=xSize*6/10;cs.cy=ySize*6/10;cs.x=(xSize-cs.cx)/2;cs.y=(ySize-cs.cy)/2;cs.style&=WS_THICKFRAME;cs.style&=(WS_MAXIMIZEBOX|WS_MINIMIZEBOX);cs.dwExStyle|=WS_EX_TOOLWINDOW;十五、设置控件字体颜

22、色:(例如STATIC控件)在OnCtlColor函数中添加如下代码:(可能需要选择STATIC的简单属性)if(nCtlColor=CTLCOLOR_STATIC)pDC-SetTextColor(RGB(255,0,0);pDC-SetBkColor(RGB(128,128,128);/设置文本背景色pDC-SetBkMode(TRANSPARENT);/设置背景透明其他控件的宏定义为:.CTLCOLOR_BTN按钮控件.CTLCOLOR_DLG对话框.CTLCOLOR_EDIT编辑框.CTLCOLOR_LISTBOX列表控件.CTLCOLOR_MSGBOX消息控件.CTLCOLOR_SC

23、ROLLBAR滚动条控件.CTLCOLOR_STATIC静态控件十六、将字符转换为数字:inti=atoi(12345);或sscanf(12345,%d,&i);十七、调用外部应用程序可使用的函数:CreateProcess、WinExec、ShellExecute。例:ShellExecute(pWnd-m_wnd,open,my.exe,NULL,NULL,SW_NORMAL)一、父窗体句柄,二、命令open,三、文件路径,四、参数,五、运行路径,六、显示方式十八、经典安装程序制作软件:InstallShieldforMicrosoftVisualC+6.0release方式是在buil

24、d菜单中的SetActiveconfiguration中改在project菜单里面,选AddtoProject的componentandcontrol来加入ocx控件十九、控件的注册:1.注册regsvr32x:/xxx/demo.ocx不一定非得在Windows系统目录2.卸载regsvr32/ux:/xxx/demo.ocx二十、获取当前时间:CTimem_time=CTime:GetCurrentTime();charszText100;memset(szText,0,100);sprintf(szText,%d_%d_%d,m_time.GetHour(),m_time.GetMini

25、te(),m_time.GetSecond();/如何得到当前时间日期CTimetime=CTime:GetCurrentTime();CStringm_strTime=time.Format(%Y-%m-%d%H:%M:%S);/方法二SYSTEMTIMEti;GetSystemTime(&ti);/如何得到当前时间日期ti.wMilliseconds;/得到毫秒时间SYSTEMTIMEtime;CStringstr;GetLocalTime(&time);str.Format(%04d:%02d:%02d,time.wYear,time.wMonth.);二一、修改单文档程序的标题:OnC

26、reat()中加入SetWindowText(weichao);CMainFrame:PreCreateWindow(CREATESTRUCT&cs)中加入cs.style=WS_OVERLAPPEDWINDOW;二二、隐藏程序在任务栏的图标:对话框程序放OnInitDialog()函数:SetWindowLong(this-m_hWnd,GWL_EXSTYLE,WS_EX_TOOLWINDOW);/隐藏任务拦按钮二三、读取编辑框内容:GetDlgItemText(IDC_EDIT_TXDATA,m_strTXData);二四、自绘菜单宽度不对,高度是对的,解决办法:在ClassWizard中

27、的ClassName下,选CMianFrame,在Messages下选WM_CONTEXTMENU并生成相应的函数,如下:voidCMainFrame:OnContextMenu(CWnd*pWnd,CPointpoint)CMenumenu;menu.LoadMenu(IDR_MENU1);/IDR_MENU1是你要弹出菜单的ID号.CMenu*popup=menu.GetSubMenu(0);popup-TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);二五、重启计算机:调用一个API函数ExitWindowsEx就可以了,两个参数:UF

28、lag,标记,可以选择EWX_REBOOT,EWX_SHUTDOWN,EWX_POWEROFF再或上EWX_FORCE第二个参数就是0了二六、无title对话框的移动:voidCScreenSnapDlg:OnLButtonDown(UINTnFlags,CPointpoint)/实现窗体无标题移动PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y);CDialog:OnLButtonDown(nFlags,point);二七、获取操作系统版本:OSVERSIONINFOOsVersionInfo;/包含操作系统版

29、本信息的数据结构OsVersionInfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);GetVersionEx(&OsVersionInfo);/获取操作系统版本信息二八、设置对话框为最顶层:(在OnInitDialog中添加)SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);二九、对话框程序不在任务栏显示:(在OnInitDialog中添加)ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);三十、向对话框窗口添加右键菜单:CMenumenu,*

30、pmenu;menu.LoadMenu(IDR_MENU1);pmenu=menu.GetSubMenu(0);CPointptScreen(point);ClientToScreen(&ptScreen);pmenu-TrackPopupMenu(TPM_RIGHTBUTTON,ptScreen.x,ptScreen.y,this);三一、文件查找:(例查找连续的换行符)FILE*fp,*fp1;intflag=0;intch;fp=fopen(c:/test.txt,r);fp1=fopen(c:/wrttest.txt,w);while(!feof(fp)ch=fgetc(fp);if(

31、feof(fp)break;if(ch=/n&flag=1)continue;elseif(ch=/n&flag=0)flag=1;elseflag=0;fputc(ch,fp1);fclose(fp1);fclose(fp);三二、托盘菜单不点击不能消失的解决办法:在菜单之后使用下述代码:CPointpt;GetCursorPos(&pt);SetForegroundWindow();NotifyMenu.TrackPopupMenu(TPM_RIGHTBUTTON,pt.x,pt.y,this);PostMessage(WM_NULL,0,0);三三、对话框由小到大显示的动画效果:在InitDialog中增加:ShowWindow(SW_HIDE);CRectdlgRect;GetClientRect(&dlgRect);CPointcenterPoint;centerPoint.x=dlgRect.Width()/2;centerPoint.y=dlgRect.Height()/2;/得到对话框的中点坐标CRgntestrgn;this-ShowWindow(SW_HIDE);intm=GetSystemMetrics(SM_CYSIZEFRAME);/以下代码实现对话框的动态弹出for(inti=10;i=0x0

温馨提示

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

评论

0/150

提交评论