1. 程式人生 > >windows應用程式【一】hello,world!

windows應用程式【一】hello,world!

    

#include <windows.h>
#include <stdio.h>

int WINAPI WinMain(HINSTANCE hlnstance,HINSTANCE hPrelnstance,LPSTR lpCmdLine,int nCmdShow)
{
	MessageBox(NULL,"hello,world!","HELLO",MB_OK|MB_ICONASTERISK);
    return 0;
}

注意的是這裡想要同時實現幾個功能需要c語言的位操作來實現

函式功能:該函式建立、顯示、和操作一個訊息框。訊息框含有應用程式定義的訊息和標題,加上預定義圖示與Push(下按)按鈕的任何組合。

    函式原型:

int MessageBox(HWND hWnd,LPCTSTR IpCaption,UINT UType);

    引數:

    hWnd:標識將被建立的訊息框的擁有視窗。如果此引數為NULL,則訊息框沒有擁有視窗。

    IpText:指向一個以NULL結尾的、含有將被顯示的訊息的字串的指標。

    IpCaption:指向一個以NULL結尾的、用於對話方塊標題的字串的指標。

    uType:指定一個決定對話方塊的內容和行為的位標誌集。此引數可以為下列標誌組中標誌的組合。

    指定下列標誌中的一個來顯示訊息框中的按鈕,標誌的含義如下。

    MB_ABORTRETRYIGNORE:訊息框含有三個按鈕:Abort,Retry和Ignore。

    MB_OK:訊息框含有一個按鈕:OK。這是預設值。

    MB_OKCANCEL:訊息框含有兩個按鈕:OK和Cancel。

    MB_RETRYCANCEL:訊息框含有兩個按鈕:Retry和Cancel。

    MB_YESNO:訊息框含有兩個按鈕:Yes和No。

    MB_YESNOCANCEL:訊息框含有三個按鈕:Yes,No和Cancel。

    指定下列標誌中的一個來顯示訊息框中的圖示:標誌的含義如下。

    MB_ICONEXCLAMATION:

    MB_ICONWARNING:一個驚歎號出現在訊息框。

    MB_ICONINFORMATION:

    MB_ICONASTERISK:一個圓圈中小寫字母i組成的圖標出現在訊息框。

    MB_ICONOUESTION:一個問題標記圖標出現在訊息框。

    MB_ICONSTOP:

    MB_ICONERROR:

    MM_ICONHAND:一個停止訊息圖標出現在訊息框。

    指定下列標誌中的一個來顯不預設的按鈕:標誌的含義如下。

    MB_DEFBUTTON1:第一個按鈕為預設按鈕。如果MB_DEFBUTTON2,MB_DEFBUTTON3,MB_DEFBUTTON4沒有被指定,則MB_DEFBUTTON1為預設值。

    MB_DEFSUTTON2;第二個按鈕為預設按鈕。

    MB_DEFBUTTON3:第三個按鈕為預設按鈕。

    MB_DEFBUTTON4:第四個按鈕為預設按鈕。

    指定下列標誌中的一個來顯示對話方塊的形態:標誌的含義如卜。

    MB_APPLMODAL:在hwnd引數標識的視窗中繼續工作以前,使用者一定響應訊息框。但是,使用者可以移動到其他執行緒的視窗且在這些視窗中工作。根據應用程式中視窗的層次機構,使用者則以移動到執行緒內的其他視窗。所有母訊息框的子視窗自動地失效,但是彈出視窗不是這樣。如果既沒有指定MB_SYSTEMMODAL也沒有指定MB_TASKMOOAL,則MB_APPLMODAL為預設的。

    MB_SYSTEMMODAL:除了訊息框有WB_EX_TOPMOST型別,MB_APPLMODAL和WS_EX_TOPMOST一樣。用系統模態訊息框來改變各種各樣的使用者,主要的損壞錯誤需要立即注意(例如,記憶體溢位)。如果不是那些與hwnd聯絡的視窗,此標誌對使用者對視窗的相互聯絡沒有影響。

    MB_TASKMODAL:如果引數hwnd為NULL,除了所有屬於當前執行緒高層次的視窗足失效的,MB_TASKMODALL和MB_ApPLMODAL一樣。當呼叫應用程式或庫沒有一個可以得到的視窗控制代碼時,使用此標誌。但仍需要阻止到呼叫應用程式甲其他視窗的輸入而不是擱置其他執行緒。

    另外,可以指定下列標誌。

    MB_DEFAULT_DESKTOP_ONLy:接收輸入的當前桌面一定是一個預設桌面。否則,函式呼叫失敗。預設桌面是一個在使用者已經紀錄且以後應用程式在此上面執行的桌面。

    MB_HELP:把一個Help按鈕增加到訊息框。選擇Help按鈕或按F1產生一個Help事件。

    MB_RIGHT:文字為右調整。

    MB_RTLREADING:用在Hebrew和Arabic系統中從右到左的順序顯示訊息和大寫文字。

    MB_SETFOREGROUND:訊息框變為前景視窗。在內部系統為訊息個呼叫SetForegrundWindow函式。

    MB_TOPMOSI:訊息框用WS_EX_TOPMOST視窗型別來建立MB_SERVICE_NOTIFICATION。

    Windows NT:呼叫程式是一個通知事件的使用者的服務程式。函式在當前活動桌面上顯示一個訊息框,即使沒有使用者登記到計算機。

    如果設定了此引數,則hwnd引數一定為NULL。所以訊息框可以出現在一個桌面上而不是桌面響應引數hwnd。

    對於Windows NT 4.0,MB_SERVICE_NOTIFICATION的值己經改變。對於舊的和新的值,請參見WINUSER。

    Windows NT 4.O通過把舊值對映到MessageBox和MessageBoxEx執行中的新值,為先存在的服務程式提供逆相容。此對映只為有了版本數目的可執行程式而做。

    為了建立一個用MB_SERVICE_NOTIFICATION的伺服器,且可以在Windows NT 3.X和Window NT 4.0上執行,可有兩種選擇。在連線時間,指定一個版本數目小於4.0的版本,或在連線時間,指定一個4.0版本。在執行時間,用函式GetVersionEx來檢測系統版本,然後在Windows NT 3.X上用MB_SERVICE_NOTIFICATION_NT 3.x來執行和在Windows NT 4.0上用MB_SERVICE_NOTIFICAION來執行。MB_SERVCE_NOTIFICATION_NT3.x(WindowNT)此值響應於為WindowNT3.51的MB_SERVICE_NOTIFICAION

    定義的值。

    返回值:如果沒有足夠的記憶體來建立訊息框,則返回值為零。如果函式呼叫成功,則返回值為下列對話方塊返回的選單專案值中的一個:

    IDABORT:Abort 按鈕被選中。IDCANCEL:Cancel按鈕被選中。IDIGNORE:Ignore按鈕被選中。

    IDNO:NO按鈕被選中。IDOK:OK按鈕被選中。IDRETRY:RETRY按鈕被選中。

    IDYES:YES按鈕被選中。

    如果一個訊息框有一個Cancel按鈕,且如果Esc鍵被按下或Cancel鍵被選擇,則函式返回IDCANCEL值。如果訊息框沒有Cancel按鈕,則按Esc鍵沒有作用。

    備註:當建立一個系統模態訊息框來表示系統在記憶體的低端中時,由lpTeXt和lpCaption引數指向的字串不應該從一個資原始檔中取出,因為試圖裝載此資源可能導致失敗。

    當一個應用程式呼叫MessageBox,且為uType引數指定MB_ICONHAND和MB_SYSTEMMODAL標誌時,系統不管可用記憶體為多少,直接顯示結果訊息框。當這些標誌被指定,系統把訊息框文字的長度侷限於三行。系統不能自動截斷要填到訊息框的行,但是訊息字串一定含有回車換行,以在合適的位置換行。

    如果在對話框出現的的同時建立了訊息框,則可使用對話方塊的控制代碼作為hwnd引數,hwnd引數不應該標識一個子視窗,例如對話方塊中的一個控制。

    Windows 95:系統可以支援最大達16364個視窗控制代碼。

    Windows CE:Windows CE 不支援uType引數的下列值:

    MB_STSTEMMODAL;MB_TASKMODAL;MB_HELP;MB_RTLREADING;MB_DEFAULT_DESKTOP_ONLY;

    MB_SERVICE_NOTIFICATION;MB_USERICON。

    不支援下列返回值:IDCLOSE;IDHELP
 

可以輸出一個對話方塊

我們也可以再利用c語言的for while(1) 等一些流程控制來實現一些很好玩的對話方塊

#include <windows.h>
#include <stdio.h>

int WINAPI WinMain(HINSTANCE hlnstance,HINSTANCE hPrelnstance,LPSTR lpCmdLine,int nCmdShow)
{
label: int select;
	   select = MessageBox(NULL,"你愛我嗎?","豬",MB_YESNO|MB_ICONWARNING);
       if(select == IDYES)
	   {
	       return 0;
	   }
       if(select == IDNO)
	   {
           goto label;     
	   }
}