這是最簡單的界面程序?:?//?c++.cpp?:?定義應用程序的入口點。
//
#include?"stdafx.h"
#include?"c++.h"
#define?MAX_LOADSTRING?100
//?全局變量:
HINSTANCE?hInst; //?當前實例
TCHAR?szTitle[MAX_LOADSTRING]; //?標題欄文本
TCHAR?szWindowClass[MAX_LOADSTRING]; //?主窗口類名
//?此代碼模塊中包含的函數的前向聲明:
ATOM MyRegisterClass(HINSTANCE?hInstance);
BOOL InitInstance(HINSTANCE,?int);
LRESULT?CALLBACK WndProc(HWND,?UINT,?WPARAM,?LPARAM);
INT_PTR?CALLBACK About(HWND,?UINT,?WPARAM,?LPARAM);
int?APIENTRY?_tWinMain(HINSTANCE?hInstance,
HINSTANCE?hPrevInstance, LPTSTRlpCmdLine, intnCmdShow){
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
//?TODO:?在此放置代碼。MSG?msg;
HACCEL?hAccelTable;
//?初始化全局字符串
LoadString(hInstance,?IDS_APP_TITLE,?szTitle,?MAX_LOADSTRING);
LoadString(hInstance,?IDC_C,?szWindowClass,?MAX_LOADSTRING);
MyRegisterClass(hInstance);
//?執行應用程序初始化:
if?(!InitInstance?(hInstance,?nCmdShow))
{
return?FALSE;
}
hAccelTable?=?LoadAccelerators(hInstance,?MAKEINTRESOURCE(IDC_C));
//?主消息循環:
while?(GetMessage(&msg,?NULL,?0,?0))
{
if?(!TranslateAccelerator(msg.hwnd,?hAccelTable,?&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return?(int)?msg.wParam;
}
//
//?函數:?MyRegisterClass()
//
//?目的:?註冊窗口類。
//
//?註釋:
//
//僅當希望
//此代碼與添加到?Windows?95?中的“RegisterClassEx”
//函數之前的?Win32?系統兼容時,才需要此函數及其用法。調用此函數十分重要,
//這樣應用程序就可以獲得關聯的
//“格式正確的”小圖標。
//
ATOM?MyRegisterClass(HINSTANCE?hInstance)
{
WNDCLASSEX?wcex;
wcex.cbSize?=?sizeof(WNDCLASSEX);
wcex.style =?CS_HREDRAW?|?CS_VREDRAW;
wcex.lpfnWndProc =?WndProc;
wcex.cbClsExtra =?0;
wcex.cbWndExtra =?0;
wcex.hInstance =?hInstance;
wcex.hIcon =?LoadIcon(hInstance,?MAKEINTRESOURCE(IDI_C));
wcex.hCursor =?LoadCursor(NULL,?IDC_ARROW);
wcex.hbrBackground =?(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName =?MAKEINTRESOURCE(IDC_C);
wcex.lpszClassName =?szWindowClass;
wcex.hIconSm =?LoadIcon(wcex.hInstance,?MAKEINTRESOURCE(IDI_SMALL));
return?RegisterClassEx(&wcex);
}
//
//函數:?InitInstance(HINSTANCE,?int)
//
//目的:?保存實例句柄並創建主窗口
//
//註釋:
//
//在此函數中,我們在全局變量中保存實例句柄並
//創建和顯示主程序窗口。
//
BOOL?InitInstance(HINSTANCE?hInstance,?int?nCmdShow)
{
HWND?hWnd;
hInst?=?hInstance;?//?將實例句柄存儲在全局變量中
hWnd?=?CreateWindow(szWindowClass,?szTitle,?WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,?0,?CW_USEDEFAULT,?0,?NULL,?NULL,?hInstance,?NULL);if?(!hWnd)
{
return?FALSE;}
ShowWindow(hWnd,?nCmdShow);
UpdateWindow(hWnd);
return?TRUE;
}
//
//?函數:?WndProc(HWND,?UINT,?WPARAM,?LPARAM)
//
//?目的:?處理主窗口的消息。
//
//?WM_COMMAND -?處理應用程序菜單
//?WM_PAINT -?繪制主窗口
//?WM_DESTROY -?發送退出消息並返回
//
//
LRESULT?CALLBACK?WndProc(HWND?hWnd,?UINT?message,?WPARAM?wParam,?LPARAM?lParam)
{
int?wmId,?wmEvent;
PAINTSTRUCT?ps;
HDC?hdc;
switch?(message)
{
case?WM_COMMAND:
wmId=?LOWORD(wParam);
wmEvent?=?HIWORD(wParam);
//?分析菜單選擇:
switch?(wmId)
{
case?IDM_ABOUT:
DialogBox(hInst,?MAKEINTRESOURCE(IDD_ABOUTBOX),?hWnd,?About);
break;
case?IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return?DefWindowProc(hWnd,?message,?wParam,?lParam);
}
break;
case?WM_PAINT:
hdc?=?BeginPaint(hWnd,?&ps);
//?TODO:?在此添加任意繪圖代碼...
EndPaint(hWnd,?&ps);
break;
case?WM_DESTROY:
PostQuitMessage(0);
break;
default:
return?DefWindowProc(hWnd,?message,?wParam,?lParam);
}
return?0;
}
//?“關於”框的消息處理程序。
INT_PTR?CALLBACK?About(HWND?hDlg,?UINT?message,?WPARAM?wParam,?LPARAM?lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch?(message)
{
case?WM_INITDIALOG:
return?(INT_PTR)TRUE;
case?WM_COMMAND:
if?(LOWORD(wParam)?==?IDOK?||?LOWORD(wParam)?==?IDCANCEL)
{
EndDialog(hDlg,?LOWORD(wParam));
return?(INT_PTR)TRUE;
}
break;
}
return?(INT_PTR)FALSE;
}