《VC界面编程归纳.doc》由会员分享,可在线阅读,更多相关《VC界面编程归纳.doc(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、,VC+界面编程总结 分类: VC+编程技术 2008-12-31 12:22 26466人阅读 评论(0) 收藏 举报 一、改变视图背景色:在CView的OnDraw函数中添写如下一段程序代码:voidCFileNameView:OnDraw(CDCpDC)CFileNameDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);CRectrectClient;CBrushbrushBkColor;GetClientRect(rectClient);brushBkColor.CreateSolidBrush(RGB(255,0,0);/颜色设置pDC-DPtoLP
2、(rectClient);pDC-FillRect(rectClient,&brushBkColor);二、往基于对话框的程序添加菜单:1先添加菜单(IDR_MENU1)资源,并加上需要的菜单项。2编辑对话框资源IDD_DLGMENUTOOLBAR_DIALOG的属性,在属性对话框中选择IDR_MENU1即可。3假如您不希望在对话框属性中直接设置菜单,而通过代码在程序中动态生成可以采用如下方法:在CFileNameDlg类声名中添加成员变量CMenum_menu,再在CFileNameDlg:OnInitDialog()中添加如下代码:/加载菜单m_menu.LoadMenu(IDR_MENU
3、1);/设置当前菜单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|CBRS_
4、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;GetClien
5、tRect(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_msgBOOLOnT
6、oolTipText(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;TOOLTIPTEXTW*pTT
7、TW=(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=strTipT
8、ext.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(pTTTW-
9、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(CFileNameDlg)ON_
10、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(LPCR
11、EATESTRUCTlpCreateStruct)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_wndToolBar)
12、;/控制是否开启任意停靠完善一下功能:在菜单中添加一项“工具栏”,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)returnF
13、ALSE;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,WM_MO
14、USEMOVE,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_CONTRO
17、LBAR_LAST,0);十一、设置初始窗口状态:BOOLCObjectNameApp:InitInstance()m_pMainWnd-SetWindowText();/设置初始窗口标题文本m_pMainWnd-ShowWindow(SW_SHOWMAXIMIZED);/设置初始窗口为最大化m_pMainWnd-UpdateWindow();对于MDI函数SetWindowText无效,主窗口的标题只能在资源列表中修改,子窗口标题在*doc.cpp中重载OnNewDocument(),调用SetTitle(LGdownload中文版);来修改。设置初始窗口最大化的另一优化方法:voidCMa
18、inFrame: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);HINS
19、TANCEhInst=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_SCROLLB
23、AR滚动条控件.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方式是在build菜单中的
24、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.GetMinite(),
25、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.);二一、修改单文档程序的标题:OnCreat(
26、)中加入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中的Clas
27、sName下,选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就可以了,两个参数:UFlag,标
28、记,可以选择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,*pmenu
30、;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(feof(
31、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);三三、对话框由小到大显示的动画效果:在InitDial
32、og中增加: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=0x0500)#defineIDC_HANDMAKEINTRESOURCE(3
33、2649)#endif/*WINVER=0x0500*/三六、使应用程序启动时不自动创建新文档在默认情况下,用AppWizard开发的SDI/MDI应用程序在启动时创建一个新的文档。如果要使应用程序在启动时不创建新文档,只需在应用类CmyApp:InitInstance()函数的ProcessShellCommand调用前加上下面的语句就可以了:cmdInfo.m_nShellCommand=CComandLineInfo:FileNothing;三七、播放mp3:CFileDialogfile(true);if(file.DoModal()=IDOK)CStringfilename=file
34、.GetFileName();if(hwnd!=NULL)MCIWndDestroy(hwnd);hwnd=MCIWndCreate(this-m_hWnd,NULL,MCIWNDF_NOPLAYBAR,filename);:ShowWindow(hwnd,SW_HIDE);MCIWndSetVolume(hwnd,1000);MCIWndPlay(hwnd);三八、获取屏幕RGB值:OnTimer中添加CPointpos;GetCursorPos(&pos);/获取鼠标坐标HDChDC=:GetDC(NULL);COLORREFclr=:GetPixel(hDC,pos.x,pos.y);C
35、StringClrText;ClrText.Format(R:%dG:%dB:%d,GetRvalue(clr),GetGvalue(clr),GetBvalue(clr);三九、打开一个网址:打开url/url这个站点如下:ShellExecute(NULL,open,NULL,NULL,SW_MAXIMIZE);此命令将以默认浏览器打开url/url,并将加开后的窗口最大化。又例:ShellExecute(NULL,open,IEXPLORE.exeurl/url,NULL,NULL,SW_MAXIMIZE);此命令将直接用IE打开一个sina的站点。不过将开一个新的窗口。四十、位图按钮:CButton*pRadio=(CButton*)GetDlgItem(IDC_RADIO);pRadio-SetBitmap(:LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP);
限制150内