




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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(32649)#endif/*WINVER=0x0500*/三六、使應用程序啟動時不自動創建
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 互聯網公司流程管理制度
- 一對一廣告制作管理制度
- 山地越野車安全管理制度
- 培訓中心辦公室管理制度
- 濱湖月考試題及答案
- 鼻腔沖洗考試題及答案
- 半永久考試題及答案
- 胺基化考試題及答案
- c++考試題及答案
- 公司法人員內部管理制度
- 《有效團隊管理培訓》課件
- 2024-2025學年新教材高中化學 第四章 物質結構 元素周期律 4.1.1 原子結構與元素周期表教案 新人教版必修第一冊
- 2023-2024學年廣東省深圳市福田區七年級(下)期末英語試卷
- 2024年陜西省專業技術人員繼續教育學習平臺黨史黨紀專題學習考試答案
- 8.3 法治社會 課件高中政治統編版必修三政治與法治
- 醫療器械經營質量體系文件-質量管理制度
- DB11T 811-2011 場地土壤環境風險評價篩選值
- DB34∕T 1555-2011 存量房交易計稅價格評估技術規范
- 桂科版八年級下冊信息技術 1.1規劃網站 教學設計
- 民辦學校托管合同范本
- 風扇合同范本
評論
0/150
提交評論