******窗口創建之前修改MFC窗口大小*************************
一 創建單文檔程序,CMainFrame::PreCreateWindow(CREATESTRUCT&cs)。
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: 在此處通過修改 // CREATESTRUCT cs 來修改窗口類或樣式 cs.cx = 800; cs.cy = 600; cs.lpszName = L"測試屬性頁表單程序"; //單這個還不能改變它的標題,因為單文檔默認模式為:WS_OVERLAPPEDWINDOW|FWS_ADDTOTITLE的聯合 //FWS_ADDTOTITLE 它是MFC類型的樣式,用來將文檔的標題添加到應用程序的標題上 //它的作用就是用來通知程序把文檔標題作為應用程序的標題 //對FWS_ADDTOTITLE取反(~) 再進行與(&)操作即可去除這個樣式 cs.style &= ~FWS_ADDTOTITLE; //或者直接cs.style=OVERLAPPEDWINDOW; 效果等同 return TRUE; }
在PreCreateWindow()設計一個窗體類,然后注冊,cs的lpClassName=新注冊的窗口類的類名,但是這樣只是修改了框架窗口的,如果要改變光標,背景之類的,則需要修改覆蓋在CMainFrame上的View類。
由於新創建的類已經注冊了,因此,在View類的PreCrateWindow中,只需要把類的名字傳遞給View::PreCreateWindow(CREATESTRUCT &cs)中的cs。設置cs。lpClassName為注冊過的窗口類。
新注冊的窗口類需要hInstance實例可以通過:AfxGetInstanceHandle(); 缺省的窗口過程函數 DefWindowProc。如果要修改應用程序圖標,通過這個方法,顯得大材小用,因此使用AfxRegisterWndClass()
******創建之后修改*************************************************************
//用於修改一個指定窗口的屬性 LONG SetWindowLong( HWND hWnd //窗口句柄 ,int nIndex //GWL_STYLE ,LONG dwNewLong //新的窗口類型 ) 在OnCreate()函數中進行修改
SetWindowLong(m_hWnd, GWL_STYLE, GetWindowLong(m_hWnd, GWL_STYLE)&~WS_MAXIMIZEBOX);//取消最大化框
在View類中增加OnCreate
SetClassLong(m_hWnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(BLACK_BRUSH)); //修改背景為黑色 這個函數用於在窗口創建之后,在程序中改變圖標
SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)LoadCursor(NULL,IDC_HELP)); //修改光標帶問號