看到很多mfc初學者都有這樣的問題:mfc單文件程式預設執行時視窗不是最大化,怎麼才能使其一開始就最大化顯示,其實對於這個問題,很多網友都解釋的不清楚,或是不全面!
其實這是在修改mfc的視窗介面的外觀,修改mfc視窗的外觀或是風格是要用到類風格(cs_***x)和視窗風格(ws_***x),學過mfc的學者都知道在winmain函式中,最開始都定義了wndclass視窗類,該類可以改變視窗的圖示,背景,游標等;
那為什麼會產生這種效果,是因為在m_pmainwnd->showwindow(sw_showmaximized);呼叫之前會先呼叫cmainframe::activateframe(int ncmdshow);此時便會根據ncmdshow(預設為sw_shownormal)呼叫顯示視窗一次,sw_shownormal會根據cs中的cx,cy,x,y來顯示視窗,所以cs.style便失去作用(檢視類(cview)已經建立,所以它已經是最大化了),所以再次呼叫m_pmainwnd->showwindow(sw_showmaximized);會形成視覺暫留!
最終解決方法是
1.過載cmainframe::activateframe(intncmdshow)
2.令ncmdshow=sw_showmaximized即可
oncreate
是乙個訊息響應函式,是響應
wm_create
訊息的乙個函式,而
wm_create
訊息是由
create
函式呼叫的。 在
view
類中,create
是虛函式由框架呼叫,是用來
「生成乙個視窗的子視窗」。
而oncreate
函式是用來
「表示乙個視窗正在生成」。
乙個視窗建立(
create
)之後,會向作業系統傳送
wm_create
訊息,oncreate()
函式主要是用來響應此訊息的。因為在
mfc裡面用一種訊息對映的機制來響應訊息,也就是可以用函式來響應相應的訊息。就拿
cmainframe
類來說,當視窗建立後會產生
wm_create
訊息,我們可以在
oncreate
函式裡實現我們要在視窗裡面增加的東西,例如按扭,狀態列,工具欄等。這些子視窗一般是定義成類中的乙個成員變數,因為要保證生命週期。一般以
m_開頭來表示成員
(member)
。在除錯mfc程式時,我們經常需要檢視特定位置變數的輸出值。或者在某特定條件執行時,給出乙個輸出標識。
一般來說,有3種方法:
1) 呼叫trace(lpctstr lpszformat, ...)函式
在mfc中使用trace函式來列印輸出結果卻是非常方便,和在控制台程式中使用printf函式的使用方法和效果類似。不過有幾點
需要注意:一,trace函式的輸出是在output視窗的debug選項下; 二,只有在debug版本除錯時才會有輸出,如果是在
release版本除錯或者執行程式時,將不會看到輸出。
2)使用afxmessagebox( )函式來輸出資訊
這個函式在除錯時也比較常用,使用方法簡單,此處就不做介紹。
3)將標準輸出定向到自己建立的控制台
#include "io.h"
#include "fcntl.h"
void initconsole()
將此函式在mfc程式初始化的地方呼叫,即可使用控制台檢視printf函式的列印資訊
openGL碰到的一些小問題
size large 最近試寫了一些opengl的程式,發現的一些小問題,準備記錄下來,如果日後理解了在回頭看看,應該也算見證了一些成長。首先交代下上下文。其實我們知道color著色,可以分為直接使用顏色glcolor4f 也可以使用頂點陣列來著色glcolorpointer 來著色。但是,如果啟動...
mfc 控制項使用的一些小問題
一 關於spin控制項按鈕上下增加數出現想反的情況 spin 控制項設定屬性 auto buddy 和 set buddy integer 之後就會與最近的edit控制項自動關聯 然而會出現按上箭頭減少,下箭頭數增加的情況 解決該問題方法是 呼叫 setrange 函式 就ok了 cspinbutt...
一些小問題
1 曼徹斯特編碼和差分曼徹斯特編碼。曼徹斯特編碼,常用於區域網傳輸。在曼徹斯特編碼中,每一位的中間有一跳變,位中間的跳變既作時鐘訊號,又作資料訊號 從高到低跳變表示 1 從低到高跳變表示 0 還有一種是差分曼徹斯特編碼,每位中間的跳變僅提供時鐘定時,而用每位開始時有無跳變表示 0 或 1 有跳變為 ...