入門Windows程序設計

自從上次作了那個SDK的黑白棋後我就一直對MFC耿耿於懷,最近又被一些童鞋「苦苦糾纏」,沒辦法,就只好研究下windows程序設計的內容了。這裏只針對入門級玩家,若是您是大神,那就不浪費您寶貴的時間了,固然若是您是和我同樣的菜鳥,那就請跟着我一塊兒來揭開windows程序設計的神祕面紗吧。windows

須要強調的是要寫windows程序須要瞭解SDK或者是MFC(不知道這個名詞的朋友請「百度google」之),對於語言的選擇仍是那句話,語言是溝通的工具,不過主流的仍是C或者C++。C可使用SDK或者MFC來設計windows程序,但用MFC前必須瞭解面向對象的概念。C++若是用來設計SDK程序的話會感受怪怪的,不夠也行。來看看下面這張圖:瀏覽器

p_w_picpath

這是我模仿程秉輝大哥畫的一張圖,由圖中你能夠很容易的看出SDK和MFC的不一樣在於SDK直接調用API函數,而MFC用類封裝來調用API,固然也能夠直接調用。框架

廢話很少說了,由於以前我設計的那個黑白棋是用SDK設計的,因此這裏我先講解一下SDK的設計方法,MFC的設計思想在之後的文章中慢慢來吧。ide

咱們能夠簡單的認爲windows程序是基於消息的事件驅動程序(這純粹是小弟我我的見解,如有不對各路大牛還請見諒),咱們對計算機作出的每個操做均可能觸發程序發送某個消息,好比咱們移動鼠標就有可能發送WM_MOUSEMOVE消息,這個消息暫且不去管他,後面會講。爲何說有可能呢?由於咱們在設計程序時是可讓它忽略這種操做的,就是咱們常說的不響應用戶操做。而發送的消息交由處理函數來進行處理就是咱們常說的事件被觸發了。可能說到這裏有些人暈了,沒事,暈了就直接往下看。函數

爲何微軟的系統要叫windows呢?由於它最大的特色就是程序大部分以一種窗口的形式存在,如你如今打開的瀏覽器就是一個窗口,因此咱們設計的windows程序顯而易見也應該是以這種形式存在,那麼其實SDK的程序結構很簡單,就兩個部分,也能夠說是兩個主要函數,一個是主函數WinMain(),這個函數就和C語言中的main()函數同樣,對於通常的windows程序必不可少。還有一個函數,就是消息處理函數,名字隨便你了,好比叫WinProc()。只要咱們寫出這兩個函數,一個簡單的windows程序就算能夠了。那這兩個函數怎麼寫呢?工具

首先來看WinMain函數的主要結構:學習

int WinMain(……)
{
    ……
    RegisterClass(……);——註冊窗口類
    CreateWindow(……);——建立窗口
    ShowWindow(……);——顯示窗口
    UpdateWindow(……);——更新窗口
    ……
    while (GetMessage(……))——循環接受並處理消息
    {
        TranslateMessage(……);
        DispatchMessage(……);
    }
    return(……);
}
this

至於……裏面寫什麼,後面再說。看到這裏你會說:嗯~sounds great~,除了那些紅色的函數。OK,讓咱們不要去管那些函數,固然他們的功能卻是能夠從他們的命名看出來(自注釋的命名方式真的不錯哦~)。google

再來看看咱們的WinProc函數:spa

long CALLBACK WinProc(……)
{
    ……
    switch(message)
    {
        case WM_MOUSEMOVE:
        {……;break;}

        case WM_KEYDOWN:
        {……;break;}
        ……
        default:
        {return DefWindowProc(……);}
    }
    return(0);
}

這時你會說:好吧,我看到那些WM開頭的消息了,而後這裏有一個case-switch語句。沒錯,我用藍色標明的地方就是處理消息的一個小單元,在這個case語句中,首先匹配到WM_MOUSEMOVE消息,而後case中會寫上處理函數進行處理,最後返回等待下一個消息的到來。

上面兩個函數都不太難看懂,我在附件中給出了一個簡單的完整框架,除了WinProc中接收消息的地方沒有寫以外,其餘該寫的都寫了,有興趣的朋友能夠下載下來看看,若是你可以明白,就建議你看看我以前的一篇黑白棋的博文http://rangercyh.blog.51cto.com/1444712/394825,下載後面的源碼,仔細研究一下,那個源碼有不少不妥和胡亂寫的地方,由於那是個人第一次嘗試,寫的爛點應該能夠理解吧!看完代碼後你會對windows程序的SDK設計有一個感性的認識,接下來我建議你借本windows程序設計教材來看看,這時你再看他的Hello world的例子應該會容易理解點。固然我也在學習中,以後也會繼續和你們分享我學習中遇到的難點和快樂,但願你們共同進步。

相關文章
相關標籤/搜索