課程咨詢: 400-996-5531 / 投(tou)訴建(jian)議: 400-111-8989
認真(zhen)做(zuo)教育 專(zhuan)心促(cu)就業
VC++(C++培訓(xun) )++5.0是(shi)(shi)Microsoft新近推出(chu)的(de)(de)(de)(de)可視化(hua)C++集成(cheng)開發(fa)(fa)環境。它(ta)在繼承以(yi)前(qian)VC++的(de)(de)(de)(de)基礎上增加了許多(duo)新的(de)(de)(de)(de)功能,用于支持Win32平(ping)臺應(ying)用程(cheng)序、服(fu)務(wu)程(cheng)序和控件的(de)(de)(de)(de)開發(fa)(fa)。VC++5.0提供了強大、快捷的(de)(de)(de)(de)編(bian)程(cheng)工具,其中最基本的(de)(de)(de)(de)是(shi)(shi)三個導航(hang):AppWizard用于程(cheng)序框架的(de)(de)(de)(de)生成(cheng),AppStudio用于資源的(de)(de)(de)(de)編(bian)輯,ClassWizard用于類(lei)的(de)(de)(de)(de)編(bian)輯和管理。其中,窗(chuang)口(kou)(kou)、菜單等無需用戶編(bian)寫程(cheng)序,而由系統自動生成(cheng)。但(dan)在許多(duo)情況(kuang)下,用戶要設置自己希(xi)望的(de)(de)(de)(de)窗(chuang)口(kou)(kou)(即(ji)定制(zhi)窗(chuang)口(kou)(kou))。
一、如(ru)何在多文檔界面下去(qu)掉開(kai)始的子窗口
在多文檔界面下,自(zi)動生成(cheng)一個(ge)(ge)新的(de)子窗口(kou),而一個(ge)(ge)實際的(de)應用(yong)系統往往是由(you)用(yong)戶(hu)操作(zuo)后再生成(cheng)新的(de)窗口(kou)。為(wei)了去掉開始的(de)子窗口(kou),可在應用(yong)程序文件(jian)分析命令(ling)行的(de)語句:
CcommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
后加入:
cmdInfo.m-nShellCommand=CcommandLineInfo::FileNothing;
去掉子(zi)窗(chuang)(chuang)口后(hou),就只剩下主(zhu)框架(jia)窗(chuang)(chuang)口了。因(yin)為(wei)在(zai)多文(wen)檔(dang)界(jie)面中,系統生成(cheng)兩個菜(cai)(cai)(cai)單(dan):一(yi)個是用(yong)戶的菜(cai)(cai)(cai)單(dan),另一(yi)個是系統主(zhu)框架(jia)菜(cai)(cai)(cai)單(dan)。通常(chang)用(yong)戶工作在(zai)用(yong)戶菜(cai)(cai)(cai)單(dan)。為(wei)了保(bao)證菜(cai)(cai)(cai)單(dan)界(jie)面不(bu)變,可修改主(zhu)框架(jia)菜(cai)(cai)(cai)單(dan)資源,使(shi)其(qi)與用(yong)戶菜(cai)(cai)(cai)單(dan)保(bao)持一(yi)致(zhi)。
二(er)、修改窗口標(biao)題欄(lan)
在缺省情況下,窗口標題欄(lan)(lan)中顯(xian)示的(de)文(wen)檔(dang)名(ming)(ming)為文(wen)件名(ming)(ming)。若要在標題欄(lan)(lan)顯(xian)示一個(ge)長字符串,而又(you)不修改文(wen)件名(ming)(ming),則可將(jiang)項目(mu)工作區轉(zhuan)換到Resource
View面版,選擇串(chuan)表(StringTable)資源,在StringTable中雙擊(ji)IDR-MAIN-FRAME項,caption中顯示一(yi)字(zi)符串(chuan)
xx\n\yy......,將(jiang)第一個參(can)數修改為用(yong)戶自己希望見(jian)到(dao)的主窗口標題即可。
三(san)、修改主框架(jia)窗(chuang)口、子窗(chuang)口及其顯示性質
可(ke)通過覆蓋CWnd的成(cheng)員函數PreCreateWindow來修改主(zhu)窗口和(he)子窗口.PreCreateWindow函數在即將創建窗口前被(bei)調用,函數原型為(wei):Virtual
BOOL PreCreateWindow函數(CREATESTRUCT
cs)。如(ru)果要(yao)覆蓋PreCreateWindow函(han)數,則在創建窗(chuang)口(kou)前可(ke)以(yi)修(xiu)改(gai)CREATESTRUCT結構以(yi)替換缺省參數。CREATESTRUCT結構存放窗(chuang)口(kou)特征,如(ru)窗(chuang)口(kou)坐標(biao)、風(feng)格(ge)等(deng),還可(ke)以(yi)定義新窗(chuang)口(kou)風(feng)格(ge)。若(ruo)想修(xiu)改(gai)主(zhu)框架窗(chuang)口(kou),則可(ke)以(yi)在MainFrm.cpp的下(xia)列(lie)成員函(han)數中加入待修(xiu)改(gai)的內容。例如(ru):
BOOL CmainFrame::PreCreateWindow(CREATESTRUCT&cs)
r>
{
//通過修(xiu)改CREATESTRUCT結(jie)構來修(xiu)改窗口類或(huo)風格
//定義新(xin)窗口的高(gao)度(du)、寬(kuan)度(du)
cs.cx=450;
cs.cy=300;
//定義新窗口風格為去掉(diao)主窗口名及最大化等按(an)鈕
cs.style=ws-POPWINDO;
return
CframeWnd::PreCreateWindow(cs);
}
定制(zhi)子窗(chuang)口的操(cao)作與上(shang)述主(zhu)窗(chuang)口相(xiang)同,可在ChildFrm.cpp中加入以(yi)下內容:
BOOL
CmainFrame::PreCreateWindow(CREATESTRUCT&cs)
{
//通過(guo)修(xiu)改CREATESTRUCT結構(gou)來修(xiu)改窗口類(lei)或風格
return
C mdichildWnd::PreCreateWindow(cs);
}
要修改視圖窗口的(de)(de)顯示性質,則(ze)可(ke)在視圖文件(jian)xxView.cpp的(de)(de)下(xia)述(shu)成員函數中加入以下(xia)語句(ju):
BOOL xxView::PreCreateWindow(CREATESTRUCT&cs)
{
//增加的語句
cs.lpszClass=AfxRegisterWndClass(cs-HREDRAW|CS-VREDRAW,0,(HBRUSH))::GetStockObject(WHITE-BRUSH),0);
return CscrollView::PreCreateWindow(cs);
}
其(qi)中,cs的參數pszClass用(yong)于存放Windows窗(chuang)口類(lei)名稱。要想注冊Windows窗(chuang)口類(lei),則必須調(diao)用(yong)全局函數AfxRegisterWndClass。該函數原(yuan)型為:
LPCTSTR AFXAPI AfxRegisterWndClass(UINTnClassStyle,HCURSOR
hCursor=0,HBRUSH
hbrBackground=0,HICON hIcon=0)
上(shang)述(shu)各參(can)數用(yong)于定義風格,其含義分別為光標資(zi)源(yuan)句柄(bing)(bing)、背(bei)景資(zi)源(yuan)句柄(bing)(bing)、圖標資(zi)源(yuan)句柄(bing)(bing)。上(shang)述(shu)增加的語(yu)句的作用(yong)是(shi):改變(bian)窗口大小時重畫窗口、不顯示光標圖標、設置白(bai)色背(bei)景。
四、窗口的滾動
使用CscrollView代(dai)替Cview類即可(ke)實現滾動窗口。此時,系統生成(cheng)OnInitialUpdate()成(cheng)員函數(shu):
void CmyscrollView::OnInitialUpdat()
{
CscrollView::OnIntialUpdate();
Csize sizeTotal;
SizeTotal.cs=sizeToal.cy=100;
SetScrollSizes(MM-TEXT,sizeTotal);
}
其中,cs和(he)cy分別為滾(gun)(gun)動(dong)(dong)(dong)窗(chuang)(chuang)口(kou)的水(shui)(shui)平、垂(chui)(chui)直(zhi)分量,表明窗(chuang)(chuang)口(kou)的水(shui)(shui)平、垂(chui)(chui)直(zhi)方(fang)向(xiang)尺(chi)寸(cun)(cun)小于(yu)100像(xiang)素單位(wei)時(shi)將出(chu)(chu)現(xian)水(shui)(shui)平方(fang)向(xiang)滾(gun)(gun)動(dong)(dong)(dong)條和(he)垂(chui)(chui)直(zhi)方(fang)向(xiang)滾(gun)(gun)動(dong)(dong)(dong)條。通過修改滾(gun)(gun)動(dong)(dong)(dong)尺(chi)寸(cun)(cun),可(ke)改變出(chu)(chu)現(xian)滾(gun)(gun)動(dong)(dong)(dong)條的最小窗(chuang)(chuang)口(kou)。例(li)如,若(ruo)“sizeTotal.cx=600;sizeTotal.cy=800;”,則當(dang)窗(chuang)(chuang)口(kou)尺(chi)寸(cun)(cun)小于(yu)600*800時(shi),就會出(chu)(chu)現(xian)滾(gun)(gun)動(dong)(dong)(dong)條。
【免(mian)責聲明】本(ben)(ben)文(wen)部分系轉載,轉載目的在(zai)于傳遞(di)更多(duo)信息,并不代表(biao)本(ben)(ben)網(wang)贊同其(qi)觀點和對(dui)其(qi)真實(shi)性負責。如(ru)涉(she)及作(zuo)品內容、版權(quan)和其(qi)它問(wen)題,請在(zai)30日內與聯(lian)系我們,我們會予以(yi)更改或刪除相關文(wen)章(zhang),以(yi)保證您(nin)的權(quan)益(yi)!