版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、VC+界面編程總結(jié) 分類: VC+編程技術(shù) 2008-12-31 12:22 26466人閱讀 評論(0) 收藏 舉報 1 / 15一、改變視圖背景色:在CView的OnDraw函數(shù)中添寫如下一段程序代碼:voidCFileNameView:OnDraw(CDCpDC)CFileNameDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);CRectrectClient;CBrushbrushBkColor;GetClientRect(rectClient);brushBkColor.CreateSolidBrush(RGB(255,0,0);/顏色設(shè)置pDC-D
2、PtoLP(rectClient);pDC-FillRect(rectClient,&brushBkColor);二、往基于對話框的程序添加菜單:1先添加菜單(IDR_MENU1)資源,并加上需要的菜單項。2編輯對話框資源IDD_DLGMENUTOOLBAR_DIALOG的屬性,在屬性對話框中選擇IDR_MENU1即可。3假如您不希望在對話框?qū)傩灾兄苯釉O(shè)置菜單,而通過代碼在程序中動態(tài)生成可以采用如下方法:在CFileNameDlg類聲名中添加成員變量CMenum_menu,再在CFileNameDlg:OnInitDialog()中添加如下代碼:/加載菜單m_menu.LoadMenu(IDR
3、_MENU1);/設(shè)置當(dāng)前菜單SetMenu(&m_menu);/當(dāng)你不需要菜單時可以用SetMenu(NULL);來取消當(dāng)前菜單三、往基于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()中修改代碼實現(xiàn)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函數(shù)的最前面!五、為dialog的工具欄添加工具提示:1在CFileNameDlg類定義中手工添加消息映射函數(shù)的定義,如下黑體部分/AFX_MSG(CFileNameDlg)virtualBOOLOnInitDialog();afx_msgvoidOnPaint();afx_msgBO
6、OLOnToolTipText(UINT,NMHDR*pNMHDR,LRESULT*pResult);/AFX_MSGDECLARE_MESSAGE_MAP()2在CFileNameDlg.cpp添加函數(shù)的實現(xiàn)代碼/工具欄提示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);;??抗ぞ邫冢涸趧偛盘砑拥暮竺婕尤胂旅娲a: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設(shè)為ID_VIEW_TOOLBAR,一切OK,試試吧!七、創(chuàng)建分隔窗口:只有框架類可以創(chuàng)建分隔,分隔可以嵌套。在.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;當(dāng)用戶創(chuàng)建好分割窗口后,有時并不希望通過拖動切分條來調(diào)節(jié)窗口的大小。這時就必須鎖定切分條。鎖定切分條的最簡單的方法莫過于不讓CSplitterWnd來處理WM_LBUTTONDOWN,
14、WM_MOUSEMOVE,WM_SETCURSOR消息,而是將這些消息交給CWnd窗口進行處理,從而屏蔽掉這些消息。拿WM_LBUTTONDOWN處理過程來說。修改為如下:voidCXXSplitterWnd:OnLButtonDown(UINTnFlags,CPointpoint)CWnd:OnLButtonDown(nFlags,point);其余的處理方法類似。八、“打開”按鈕的設(shè)置:用類向?qū)?chuàng)建該按鈕的click函數(shù),選擇默認值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)函數(shù)中增加:CenterWindow();即可十、對話框加狀態(tài)條: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);十一、設(shè)置初始窗口狀態(tài):BOOLCObjectNameApp:InitInstance()m_pMainWnd-SetWindowText();/設(shè)置初始窗口標(biāo)題文本m_pMainWnd-ShowWindow(SW_SHOWMAXIMIZED);/設(shè)置初始窗口為最大化m_pMainWnd-UpdateWindow();對于MDI函數(shù)SetWindowText無效,主窗口的標(biāo)題只能在資源列表中修改,子窗口標(biāo)題在*doc.cpp中重載OnNewDocument(),調(diào)用SetTitle(LGdownload中文版);來修改。設(shè)置初始窗口最大化的另一優(yōu)化方法: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函數(shù)指針fun=(MYFUNC)GetProcAddress(hInst,SetLayeredWindowAttributes);if(fun)fun(this-GetSafeHwnd(),0,128,2);FreeLibrary(hInst);注意:fun的參數(shù)128不能太小,否則就完全透明了!十三、設(shè)置
20、對話框里的STATIC控件顏色屬性:在該對話框增加WM_CTLCOLOR事件,加入以下代碼:if(nCtlColor=CTLCOLOR_STATIC)pDC-SetTextColor(RGB(255,255,255);pDC-SetBkColor(RGB(91,145,244);pDC-SetBkMode(TRANSPARENT);/設(shè)置透明設(shè)置STATIC控件背景透明:if(nCtlColor=CTLCOLOR_STATIC)pDC-SetBkMode(TRANSPARENT);/設(shè)置透明return(HBRUSH):GetStockObject(NULL_BRUSH);十四、使窗口的最大化
21、和最小化按鈕消失:在PreCreateWindow函數(shù)中添加以下代碼即可: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;十五、設(shè)置控件字體顏
22、色:(例如STATIC控件)在OnCtlColor函數(shù)中添加如下代碼:(可能需要選擇STATIC的簡單屬性)if(nCtlColor=CTLCOLOR_STATIC)pDC-SetTextColor(RGB(255,0,0);pDC-SetBkColor(RGB(128,128,128);/設(shè)置文本背景色pDC-SetBkMode(TRANSPARENT);/設(shè)置背景透明其他控件的宏定義為:.CTLCOLOR_BTN按鈕控件.CTLCOLOR_DLG對話框.CTLCOLOR_EDIT編輯框.CTLCOLOR_LISTBOX列表控件.CTLCOLOR_MSGBOX消息控件.CTLCOLOR_SC
23、ROLLBAR滾動條控件.CTLCOLOR_STATIC靜態(tài)控件十六、將字符轉(zhuǎn)換為數(shù)字:inti=atoi(12345);或sscanf(12345,%d,&i);十七、調(diào)用外部應(yīng)用程序可使用的函數(shù):CreateProcess、WinExec、ShellExecute。例:ShellExecute(pWnd-m_wnd,open,my.exe,NULL,NULL,SW_NORMAL)一、父窗體句柄,二、命令open,三、文件路徑,四、參數(shù),五、運行路徑,六、顯示方式十八、經(jīng)典安裝程序制作軟件:InstallShieldforMicrosoftVisualC+6.0release方式是在buil
24、d菜單中的SetActiveconfiguration中改在project菜單里面,選AddtoProject的componentandcontrol來加入ocx控件十九、控件的注冊:1.注冊regsvr32x:/xxx/demo.ocx不一定非得在Windows系統(tǒng)目錄2.卸載regsvr32/ux:/xxx/demo.ocx二十、獲取當(dāng)前時間: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();/如何得到當(dāng)前時間日期CTimetime=CTime:GetCurrentTime();CStringm_strTime=time.Format(%Y-%m-%d%H:%M:%S);/方法二SYSTEMTIMEti;GetSystemTime(&ti);/如何得到當(dāng)前時間日期ti.wMilliseconds;/得到毫秒時間SYSTEMTIMEtime;CStringstr;GetLocalTime(&time);str.Format(%04d:%02d:%02d,time.wYear,time.wMonth.);二一、修改單文檔程序的標(biāo)題:OnC
26、reat()中加入SetWindowText(weichao);CMainFrame:PreCreateWindow(CREATESTRUCT&cs)中加入cs.style=WS_OVERLAPPEDWINDOW;二二、隱藏程序在任務(wù)欄的圖標(biāo):對話框程序放OnInitDialog()函數(shù):SetWindowLong(this-m_hWnd,GWL_EXSTYLE,WS_EX_TOOLWINDOW);/隱藏任務(wù)攔按鈕二三、讀取編輯框內(nèi)容:GetDlgItemText(IDC_EDIT_TXDATA,m_strTXData);二四、自繪菜單寬度不對,高度是對的,解決辦法:在ClassWizard中
27、的ClassName下,選CMianFrame,在Messages下選WM_CONTEXTMENU并生成相應(yīng)的函數(shù),如下: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);二五、重啟計算機:調(diào)用一個API函數(shù)ExitWindowsEx就可以了,兩個參數(shù):UF
28、lag,標(biāo)記,可以選擇EWX_REBOOT,EWX_SHUTDOWN,EWX_POWEROFF再或上EWX_FORCE第二個參數(shù)就是0了二六、無title對話框的移動:voidCScreenSnapDlg:OnLButtonDown(UINTnFlags,CPointpoint)/實現(xiàn)窗體無標(biāo)題移動PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y);CDialog:OnLButtonDown(nFlags,point);二七、獲取操作系統(tǒng)版本:OSVERSIONINFOOsVersionInfo;/包含操作系統(tǒng)版
29、本信息的數(shù)據(jù)結(jié)構(gòu)OsVersionInfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);GetVersionEx(&OsVersionInfo);/獲取操作系統(tǒng)版本信息二八、設(shè)置對話框為最頂層:(在OnInitDialog中添加)SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);二九、對話框程序不在任務(wù)欄顯示:(在OnInitDialog中添加)ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);三十、向?qū)υ捒虼翱谔砑佑益I菜單:CMenumenu,*
30、pmenu;menu.LoadMenu(IDR_MENU1);pmenu=menu.GetSubMenu(0);CPointptScreen(point);ClientToScreen(&ptScreen);pmenu-TrackPopupMenu(TPM_RIGHTBUTTON,ptScreen.x,ptScreen.y,this);三一、文件查找:(例查找連續(xù)的換行符)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;/得到對話框的中點坐標(biāo)CRgntestrgn;this-ShowWindow(SW_HIDE);intm=GetSystemMetrics(SM_CYSIZEFRAME);/以下代碼實現(xiàn)對話框的動態(tài)彈出for(inti=10;i=0x0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 提升表達能力課程設(shè)計
- 包裝材料質(zhì)量手冊第一版(一)
- 特殊計算器課程設(shè)計c
- 2024年藥房管理制度
- PEP小學(xué)英語三年級上冊Unit1 PartA Let's talk 同步課時練
- 財務(wù)工作總結(jié)應(yīng)收賬款與付款管理
- 導(dǎo)演行業(yè)人事工作總結(jié)
- 研究所保安工作總結(jié)
- 聚焦業(yè)績提升的年度工作方案計劃
- 股份接受協(xié)議三篇
- 中考語文真題專題復(fù)習(xí) 小說閱讀(第01期)(解析版)
- GB 45067-2024特種設(shè)備重大事故隱患判定準(zhǔn)則
- 《陸上風(fēng)電場工程概算定額》NBT 31010-2019
- 生物醫(yī)學(xué)電子學(xué)智慧樹知到期末考試答案章節(jié)答案2024年天津大學(xué)
- 幸福創(chuàng)業(yè)智慧樹知到期末考試答案章節(jié)答案2024年山東大學(xué)
- 2023 版《中國近現(xiàn)代史綱要》 課后習(xí)題答案
- 2023-2024學(xué)年湖北省數(shù)學(xué)三年級第一學(xué)期期末統(tǒng)考試題含答案
- LNG安全技術(shù)說明書
- 日本陸上自衛(wèi)隊編制及其駐地
- 社會主義核心價值觀—文明”主題班會教案
- 十二緣起支:生命輪回的次序PPT課件
評論
0/150
提交評論