不知道為何,寫過的一個blog不見了,于是重新簡單的整理下。本來有篇blog需要互相輔正的,不過沒辦法了。
創(chuàng)建時修改,即在CMainFrame的成員函數(shù)PreCreateWindow函數(shù)來實現(xiàn)。
1.創(chuàng)建時修改程序的外觀:修改初始化的窗口大小等等屬性。
在CMainFrame函數(shù)中,設(shè)置cs的各個屬性,cs是一個結(jié)構(gòu)體,設(shè)置cx,cy表示它的大小,設(shè)置其他的表示另外的大小。
注:原書由一個錯誤,可是,可以通過配套的源代碼來看出。
就是書上是: cs.style |= ~FWS_ADDTOTITLE;
而代碼上是: cs.style = WS_OVERLAPPEDWINDOW;
如果按照書上的代碼,就會假死,每次啟動都失去響應(yīng),而且標(biāo)題沒有名稱。
如果是代碼上的 cs.style = WS_OVERLAPPEDWINDOW;則不會出現(xiàn)這個結(jié)果。
修改的源代碼如下:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)


{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs

cs.cx = 500;
cs.cy = 300;
// cs.style = WS_OVERLAPPEDWINDOW;
cs.style |= ~FWS_ADDTOTITLE;
cs.lpszName = "Helloworld";

return TRUE;
}

注:可以通過修改CMainFrame的成員函數(shù)PreCreateWindow函數(shù)的CREATESTRUCT結(jié)構(gòu)體來個性化窗口的外觀。在單文檔應(yīng)用程序中,默認的窗口類型是WS_OVERLAPPEDWINDOW和FWS_ADDTOTILE,其中,F(xiàn)WS_ADDTOTITLE是一個MFC類型,將文檔的標(biāo)題添加到窗口標(biāo)題。所以要設(shè)置窗口標(biāo)題的內(nèi)容,必須將FWS_ADDTOTITLE屬性去掉。
但是,將屬性設(shè)置改為&之后,就不會出現(xiàn)那個問題了。怪了…………
特別注意的是,如果不講屬性設(shè)置為~FWS_ADDTOTITLE,就不會更改標(biāo)題的名稱,即使設(shè)置了lpszName也不行

具體的屬性設(shè)置見:
http://m.shnenglu.com/deercoder/archive/2010/02/17/107962.html2.創(chuàng)建后設(shè)置的話,需要在CMainFrame和View中的OnCreate函數(shù)中,實現(xiàn)SetClassLong函數(shù)的使用。
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)


{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}

if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))

{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}

// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);

SetClassLong(m_hWnd,GCL_HICON,(LONG)LoadIcon(NULL,IDI_ERROR)); //更改窗口圖標(biāo),同前面的AfxRegisterWndClass函數(shù)

return 0;
}

int CTest14View::OnCreate(LPCREATESTRUCT lpCreateStruct)


{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
SetClassLong(m_hWnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(GRAY_BRUSH));
SetClassLong(m_hWnd,GCL_HCURSOR,(LONG)LoadCursor(NULL,IDC_HELP));

return 0;
}




詳見《Visual C++編程范例開發(fā)金典》 P96--99
posted on 2010-02-17 21:46
deercoder 閱讀(459)
評論(0) 編輯 收藏 引用 所屬分類:
MFC程序設(shè)計入門