2010年10月20日
[C++學習筆記]MFC常用基礎類別
CWnd
CWnd是許多類別的基礎類別,如:Cbutton和CDialog。
因此button、對話框、scroll bar等等,其實都算是一個「視窗」。
CWinApp
CWinApp這個類別是MFC程式的骨架,開始執行程式的時候,CWinApp就存在程式中。
而建構CWinApp時,會呼叫InitInstance()這個function,我們可以把這個function想像成C程式的main() function。
CSring
用於字串,可以讓許多操作變得更容易。
[C++學習筆記]用->還是用.
假設我們有一個類別Cbox
| 1 | class Cbox |
| 2 | { |
| 3 | int length; |
| 4 | int width; |
| 5 | int height; |
| 6 | public: |
| 7 | draw(); |
| 8 | } |
使用draw()函式的方法:
| 1 | Cbox *pbox; |
| 2 | Cbox candyBox; |
| 3 | pbox->draw(); |
| 4 | candyBox.draw(); |
使用指標時必須使用間接成員存取運算子"->"
使用物件必須使用直接成員存取運算子"."
[C++學習筆記]Messages 和Handles
Message
視窗程式是以Message為基礎的,依靠Message的傳送和回應使得視窗程式能夠運作。
Message是一個32位元的數字。
當我們移動滑鼠時,Message (WM_MOUSEMOVE)就會被傳送到目前的視窗;當我們改變視窗位置時,Message(WM_MOVE)就會被傳送到目前的視窗。
這些Message會被排入Queue(佇列)中,視窗會將他們從Queue中取出,並進行對應的動作,若是視窗得到了WM_SIZE(改變視窗大小)的Message,視窗就會在螢幕上重新繪製。
Handles
視窗程式要使用Handles來判斷各個不同的視窗。
Handles是一個參考不同視窗物件的方法,我們可以將Handles想像成指向各個視窗的一種指標,Handles必須要在使用完之後銷毀,否則會使程式及系統當機。
Messages 和Handles的運作
假設我們擁有一個視窗,我們擁有視窗的Handles,我們將這個Handles命名為My_HWND。
如果作業系統要告知要重新繪製視窗,系統就會傳送一個Message
| PostMessage(My_HWND, WM_PAINT, 0, 0); |
| void HandleMessage(long Message) { switch(Message) { case WM_PAINT: DrawWindows(); break; case WM_SIZE: //do something break; } } |
2010年10月15日
[C++學習筆記]範圍解析運算子(scope resolution operator ::)
當區域變數名稱和全域變數名稱相同時,在區域變數名稱的範圍之內,全域變數會被隱藏,而我們可以透過範圍解析運算子: : (兩個冒號)來存取全域變數。
| 1 | #include<iostream> | |
| 2 | using std::cout; | |
| 3 | using std::endl; | |
| 4 | int num=100; | |
| 5 | int main() | |
| 6 | { | |
| 7 | int num = 1; | |
| 8 | cout <<"inner num: " <<num <<endl; | |
| 9 | cout <<"global num: " <<::num <<endl; | |
| 10 | return 0; | |
| 11 | } |
執行的結果是
inner num: 1
global num: 100
[C++學習筆記]2種標準的C++
| ISO/ANSI | C++/CLI | |
| 程式特性 | 可直接編譯成機器碼並在本機執行的程式碼。 未受控管的C++程式,因程式並沒有受到CLR的控制,必須自行處理記憶體的配置與釋放。 | 在CLR中執行的視窗程式,user必須安裝.NET Framework 在CLR中執行的程式碼,是受控管的C++(managed C++),因為CLR會控制程式碼和資料,例如釋放自動配置的記憶體,這樣可以消除某些原生C++(native C++)程式產生的錯誤。 |
| GUI開發 |
| 可以使用由.NET Framework函式庫提供的Windows Froms做為GUI的基礎。若使用Windows Froms,程式開發者就可以使用圖形化的介面,快速的開發GUI,而程式碼則是自動產出的,開發者只須對自動產生的程式碼進行增修。 |
訂閱:
文章 (Atom)