MFC Windows應用程序學習之處

怎麼說呢,如果說是MFC倒不如說是MFC Windows應用程序(他們到底是什麼關係,網上是這樣認爲的:

Windows程序設計一般是指用c語言編寫windows應用程序,或叫做win32編程,MFC程序設計是利用C++,以MFC爲基礎編寫windows應用程序;VC是一個開發工具,在這個開發工具裏,可以進行win32編程和MFC程序設計

首先我們要知道windows應用程序是由Windows系統程序主函數及與其相關的事件消息處理函數組成的,我們需要編寫的就是主函數和消息處理函數。主函數的作用就是用來創建窗口,接受用戶事件並且將事件消息發送給系統(注意這裏不同於Java的事件監聽器);事件處理函數就是用來處理各種的反應,並且把處理後的結果返回給主函數。這兩者

(主函數和事件處理函數)之間的通信就是通過Windows系統來實現的。我們還有知道有一個基本概念就是:句柄,

這個句柄是什麼呢?很簡單的說就是一個我可以用來調用微軟封裝好之後的所有函數。下面是一個簡單的Windows程序,當鼠標左鍵單擊程序窗口的用戶區時,計算機的揚聲器會發出“叮”的聲音。


#include "stdafx.h"
#include "Windows.h"
#include<windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE PreFetchCacheLine,LPSTR lpCmdLine,int nCmdShow)
{
    HWND hwnd;                    //定義窗口句柄
    MSG msg;                          //定義一個用來存儲消息的變量
    char lpszClassName[]="窗口";
    WNDCLASS wc;
    wc.lpfnWndProc=WndProc;
    wc.style=0;
    wc.cbClsExtra=0;
    wc.cbWndExtra=0;
    wc.hInstance=hInstance;
    wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    wc.lpszMenuName=NULL;                           //窗口沒有菜單
    wc.lpszClassName=lpszClassName;

    RegisterClass(&wc);                              //註冊窗口類型

    //創建窗口
    hwnd=CreateWindow(lpszClassName,          //窗口類的名稱
                        "Windows",              //窗口實例的標題
                        WS_OVERLAPPEDWINDOW,   //窗口的風格
                        120,                 //窗口左上角位置座標值x
                        50,    //窗口左上角位置座標值y
                        800,//寬度
                        600,//窗口的高度
                        NULL,//父菜單的句柄
                        NULL,//主菜單的句柄
                        hInstance,//應用程序實例句柄
                        NULL);//該值通常爲NULL

    ShowWindow(hwnd,nCmdShow);                  //顯示窗口
    UpdateWindow(hwnd);


    while (GetMessage(&msg,NULL,0,0))             //消息循環
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
    switch (message)
    {                     //鼠標左鍵按下消息
    case WM_LBUTTONDOWN:
        {
            MessageBeep(0);           //可以發出聲音的API函數
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hwnd,message,wParam,lParam);
    }
    return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章