[MFC] _ windows應(yīng)用程序(win32)簡單了解和使用

在前面,我們都是通過控制臺程序來學(xué)習(xí)c++語言的,那么我們知道,windows之所以強大,是應(yīng)為它是一個圖形化的支持多任務(wù)處理的一個系統(tǒng),所以windows應(yīng)用程序更控制臺程序最大的區(qū)別就是它是多任務(wù)的,可以同時運行多個,進行多任務(wù)的處理,而控制臺程序是單任務(wù)的,只能按程序設(shè)計流程單步進行.

  • MFC(Microsoft Foundation Class)微軟 基礎(chǔ) 類庫

  • API(Application Programming Interface) 應(yīng)用程序,編程 接口.
    是由操作系統(tǒng)提供,面向操作系統(tǒng)開發(fā)的接口.只限于本操作系統(tǒng)使用.c/c++庫函數(shù),不分任何操作系統(tǒng).只要是使用c/c++編譯器即可.

  • DOS: 同一時間只能運行一個執(zhí)行程序.

  • Windows: 是一種基于圖形化界面的多任務(wù)操作系統(tǒng),它使用圖形界面操作代替了早期的以命令為基礎(chǔ)的文本輸入型操作系統(tǒng).

  • WinMain是windows程序的主函數(shù),該函數(shù)的功能是被系統(tǒng)調(diào)用,作為一個32位應(yīng)用程序的入口點。WinMain函數(shù)應(yīng)初始化應(yīng)用程序,顯示主窗口,進入一個消息接收一發(fā)送循環(huán),這個循環(huán)是應(yīng)用程序執(zhí)行的其余部分的頂級控制結(jié)構(gòu)。

  • windows程序一般主要都是基于windows系統(tǒng) 的API函數(shù)來開發(fā)的,只限于本操作系統(tǒng)使用.每個windows api都來自一個windows系統(tǒng)(內(nèi)核,是系統(tǒng)自帶的)的DLL動態(tài)庫(可以在本地對應(yīng)的位置找到的).

  • 控制臺程序一般都是調(diào)用的c/c++類庫的函數(shù)(各個操作系統(tǒng)都通用).


  • MessageBox function 函數(shù)

Displays(顯示) a modal(模式的) dialog(對話) box that contains a system icon, a set of buttons, and a brief application-specific message, such as status or error information. The message box returns an integer value that indicates which button the user clicked.

顯示一個模式對話框,該對話框包含系統(tǒng)圖標,一組按鈕以及指定的應(yīng)用程序的簡短消息,例如狀態(tài)或錯誤信息。 該消息框返回一個整數(shù)值,該整數(shù)值指示用戶單擊了哪個按鈕。

dialog box: 對話框,一定是有對話的,點擊了什么,顯示什么,消息的接收和處理.
參數(shù):

int WINAPI MessageBox(
  _In_opt_ HWND    hWnd,
  _In_opt_ LPCTSTR lpText,
  _In_opt_ LPCTSTR lpCaption,
  _In_     UINT    uType
);
hWnd [in, optional] //optional (可選的,自選的)
Type: HWND(類型:HWND)

//A handle(句柄) to the owner(所有者) window of the message box to be created. If this parameter(參數(shù)) is NULL, the message box has no owner window.
//一個關(guān)于消息框創(chuàng)建彈出時父類窗口的句柄(指向消息框創(chuàng)建時彈出的位置).

lpText [in, optional] // 一個字符串
Type: LPCTSTR  
//The message to be displayed(顯示). If the string consists(組成) of more than one line, you can separate(分離,隔開) the lines using a carriage(運輸運送) return and/or linefeed(換行) character between(之間) each line.
//carriage return 回車.
//這條消息將會顯示,如果這個字符串包括多行組成,你可以在每行之間使用回車或換行符換行.

lpCaption(標題,字幕) [in, optional] 
Type: LPCTSTR

// The dialog box title. If this parameter is NULL, the default(默認) title is Error.
// 對話框的標題,如果參數(shù)為空,則默認標題為Error

uType [in] 
Type: UINT
//The contents(內(nèi)容) and behavior(行為) of the dialog box. This parameter(參數(shù)) can be a combination(組合) of flags(標志) from the following(以下) groups(組) of flags.
// 類型,指定消息框的類型(有很多).可以是一個組合來自以下標志組的標志類型.
//To indicate(標明,指示) the buttons displayed in the message box, specify(指定,指明) one of the following values.
//要指示這個消息框的按鈕,可以指定下面的值之一.
  • examples
int DisplayResourceNAMessageBox()
{
    int msgboxID = MessageBox(
        NULL,
        (LPCWSTR)L"Resource not available\nDo you want to try again?",
        (LPCWSTR)L"Account Details",
        MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2
    );

    switch (msgboxID)
    {
    case IDCANCEL:
        // TODO: add code
        break;
    case IDTRYAGAIN:
        // TODO: add code
        break;
    case IDCONTINUE:
        // TODO: add code
        break;
    }

    return msgboxID;
}

我們在創(chuàng)建的win32空項目中新建一個源cpp文件,引入windows.h頭文件,聲明主函數(shù),調(diào)用MessageBox函數(shù)顯示一個對話框,即算是創(chuàng)建了一個簡單的windows應(yīng)用程序了.

# include<Windows.h>

int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprev,LPSTR lpCmd,int nCmdShow) {

    // 這里涉及到字符集的問題,在vs2005之后就引入了unicode字符集,
    // 在使用unicode的時候,需要注意字符類型的轉(zhuǎn)換.使用多字節(jié)就不需要轉(zhuǎn)換,還是可以正常使用
    // MessageBox(NULL,(LPWSTR)L"this is a message",(LPWSTR)L"message box caption",0);

    // 當Hwnd parameter 為NULL時,相當于將自己作為父窗口.

    MessageBox(NULL,"this is a message box", "message box caption", 0);

    return 0;
}
圖片.png

2019.12.20
14:42

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容