寫MFC程式中碰到的一些小問題

2021-06-07 21:34:02 字數 1745 閱讀 8070

看到很多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 有跳變為 ...