當前位置:編程學習大全網 - 編程語言 - 用C語言怎麽實現圖形化界面?

用C語言怎麽實現圖形化界面?

這是最簡單的界面程序?:?//?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;

}

  • 上一篇:如何才能提高計算機基礎教學效果
  • 下一篇:被疫情虐後的出行市場——唯有軟件設計創新才能平穩渡過難關
  • copyright 2024編程學習大全網