【win32】day09-對話框/子控件/靜態塊/按鈕/文本編輯框
來源:程序員人生 發布時間:2016-10-11 08:24:59 閱讀次數:2668次
對話框
1 對話框的分類
2 對話框的基本使用方式
3 對話框資源
4 有模式對話框的使用
5 無模式對話框的使用
5.1 添加對話框資源
5.2 定義窗口處理函數
BOOL CALLBACK DialogProc(
HWND hwndDlg, // handle to dialog box
UINT uMsg, // message
WPARAM wParam, // first message parameter
LPARAM lParam ); // second message parameter
5.3 創建對話框
HWND CreateDialog(
HINSTANCE hInstance,//利用程序實例句柄
LPCTSTR lpTemplate,//對話框的資源ID
HWND hWndParent,//父窗口
DLGPROC lpDialogFunc );//對話框的窗口處理函數
返回值是創建好的對話框的窗口句柄。
5.4 顯示對話框
ShowWindow
5.5 關閉對話框
EndDialog
點擊查找的時候, 無模式對話框出來。
// WinModelessDlg.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "resource.h"
HINSTANCE g_hInst = NULL;
BOOL CALLBACK FindDlgProc( HWND hWnd,
UINT nMsg, WPARAM wParam, LPARAM lParam )
{
switch( nMsg )
{
case WM_CREATE:
MessageBox( NULL, "WM_CREATE",
"WinDlg", MB_OK );
break;
case WM_INITDIALOG:
MessageBox( NULL, "WM_INITDIALOG",
"WinDlg", MB_OK );
break;
case WM_SYSCOMMAND:
{
switch( wParam )
{
case SC_CLOSE:
EndDialog( hWnd, 0 );
break;
}
}
break;
}
return 0;
}
void Find( HWND hWnd )
{ //創建對話框
HWND hDlg = CreateDialog( g_hInst,
MAKEINTRESOURCE(IDD_FIND),
hWnd, FindDlgProc );
//顯示對話框
ShowWindow( hDlg, SW_SHOW );
}
void OnCommand( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
int nCmdID = LOWORD( wParam );
switch( nCmdID )
{
case ID_EXIT:
PostQuitMessage( 0 );
break;
case ID_FIND:
Find( hWnd );
break;
}
}
LRESULT CALLBACK WndProc( HWND hWnd,
UINT nMsg,
WPARAM wParam,
LPARAM lParam )
{
switch( nMsg )
{
case WM_COMMAND:
OnCommand( hWnd, nMsg, wParam, lParam );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, nMsg,
wParam, lParam );
}
BOOL RegisterWnd( LPSTR pszClassName )
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof( wce );
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.hbrBackground = HBRUSH(COLOR_WINDOW);
wce.hCursor = NULL;
wce.hIcon = NULL;
wce.hIconSm = NULL;
wce.hInstance = g_hInst;
wce.lpfnWndProc = WndProc;
wce.lpszClassName = pszClassName;
wce.lpszMenuName = NULL;
wce.style = CS_HREDRAW|CS_VREDRAW;
ATOM nAtom = RegisterClassEx( &wce );
if( 0 == nAtom )
{
return FALSE;
}
return TRUE;
}
HWND CreateWnd( LPSTR pszClassName )
{
HMENU hMenu = LoadMenu( g_hInst,
MAKEINTRESOURCE(IDR_MAIN) );
HWND hWnd = CreateWindowEx( 0,
pszClassName, "MyWnd",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, NULL, hMenu, g_hInst,
NULL );
return hWnd;
}
void DisplayWnd( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}
void Message( )
{
MSG msg = { 0 };
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
g_hInst = hInstance;
RegisterWnd( "MYWND" );
HWND hWnd = CreateWnd( "MYWND" );
DisplayWnd( hWnd );
Message( );
return 0;
}
5.6 與有模式對話框對照
創建函數: 有模式對話框DialogBox
無模式對話框 CreateDialog
程序履行方式:
有模式對話框會阻塞,制止其他窗口的輸入
無模式對話框會讓主程序,不影響其它窗口的輸入
6 對話框中的消息
WM_INITDIALOG消息,用處類似于WM_CREATE消息
可以在對話框創建完成后,進行數據初始化.
它與WM_CREATE不同的地方是,WM_INITDIALOG消息
會在對話框資源模板上的所有子控件(按鈕等)
創建完成后,再發送給對話框窗口.
wParam - 當前接受輸入焦點子控件窗口句柄
lParam - 創建時附帶的參數
7 對話框和普通窗口的對照
7.1 創建方式
普通窗口: CreateWindow/Ex
對話框: DialogBox/CreateDialog
7.2 消息
普通窗口: 會收到WM_CREATE
對話框: WM_INITDIALOG
7.3 關閉方式:
普通窗口: DestoryWindow等
對話框: EndDialog
子控件
1 子控件
1.1 控件的類型
由Windows系統定義的窗口類型,可以提供
相應的功能.包括按鈕、文本編輯框、靜態框等.
1.2 控件的創建
都可使用CreateWindow/CreateWindowEx
創建,并獲得到控件HWND。創建時每一個子控件
都要有相應的ID號,ID號要求不重復。
1.3 控件的消息
子控件和父窗口(1般窗口或對話框)的交互
都是通過消息完成。如果子窗口狀態產生變化,
子窗口會向父窗口發送相應的消息。
1般父窗口會使用SendMessage函數向子窗口
發送消息。
父窗口響應子窗口發送的消息1般是在
WM_COMMAND進行處理。
靜態框
1 靜態框創建
窗口類的名稱 - STATIC,
用于窗口上
顯示文字等, 如果使用SS_ICON/SS_BITMAP
風格可以顯示ICON和BITMAP
文本靜態框 - 創建時使用SS_SIMPLE便可
ICON靜態框 -創建時需要使用SS_ICON,并且
將靜態框的窗口名稱設置成對應ICON的資源
ID號,例如"#101".
2 靜態框的命令相應
2.1 靜態框要添加SS_NOTIFY風格
2.2 WM_COMMAND進行處理
WPARAM - HIWORD 命令ID
LOWORD 靜態框的窗口ID
LPARAM - 靜態框的窗口句柄.
3 靜態框的消息
調用SendMessage函數,向Static控件發送消息
例如: STM_SETICON消息修改控件顯示圖標
SendMessage( hStatic, STM_SETICON,
(WPARAM)hIcon, 0 );
其他:
GetDlgItem 從窗口中獲得指定ID的子控件的
窗口句柄
// WinStatic.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "resource.h"
HINSTANCE g_hInst = NULL;
void OnCreate( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
CreateWindow( "STATIC", "hello Static",
WS_CHILD|WS_VISIBLE|SS_SUNKEN|SS_SIMPLE|SS_NOTIFY,
50, 50, 100, 100, hWnd, (HMENU)1001,
g_hInst, NULL );
CreateWindow( "STATIC", "#101",
WS_CHILD|WS_VISIBLE|SS_SUNKEN|SS_ICON|SS_NOTIFY,
200, 50, 100, 100, hWnd, (HMENU)1002,
g_hInst, NULL );
}
void OnCommand( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
int nCmdID = HIWORD( wParam );
int nCtrlID = LOWORD( wParam );
switch( nCtrlID )
{
case 1001:
case 1002:
{
switch( nCmdID )
{
case STN_CLICKED:
MessageBox( NULL, "Hello Static",
"WinStatic", MB_OK );
break;
}
}
break;
}
}
LRESULT CALLBACK WndProc( HWND hWnd,
UINT nMsg,
WPARAM wParam,
LPARAM lParam )
{
switch( nMsg )
{
case WM_CREATE:
OnCreate( hWnd, nMsg, wParam, lParam );
break;
case WM_COMMAND:
OnCommand( hWnd, nMsg, wParam, lParam );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, nMsg,
wParam, lParam );
}
BOOL RegisterWnd( LPSTR pszClassName )
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof( wce );
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.hbrBackground = HBRUSH(COLOR_WINDOW);
wce.hCursor = NULL;
wce.hIcon = NULL;
wce.hIconSm = NULL;
wce.hInstance = g_hInst;
wce.lpfnWndProc = WndProc;
wce.lpszClassName = pszClassName;
wce.lpszMenuName = NULL;
wce.style = CS_HREDRAW|CS_VREDRAW;
ATOM nAtom = RegisterClassEx( &wce );
if( 0 == nAtom )
{
return FALSE;
}
return TRUE;
}
HWND CreateWnd( LPSTR pszClassName )
{
HWND hWnd = CreateWindowEx( 0,
pszClassName, "MyWnd",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, NULL, NULL, g_hInst,
NULL );
return hWnd;
}
void DisplayWnd( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}
void Message( )
{
MSG msg = { 0 };
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
g_hInst = hInstance;
RegisterWnd( "MYWND" );
HWND hWnd = CreateWnd( "MYWND" );
DisplayWnd( hWnd );
Message( );
return 0;
}
按鈕
1 按鈕的分類
根據創建按鈕時使用的風格:
1.1 下壓式按鈕 PUSH BUTTON
正常下壓式按鈕 BS_PUSHBUTTON
3態下壓按鈕 BS_3STATE/BS_AUTO3STATE
1.2 分組按鈕 Group Button
按鈕樣式:BS_GROUPBOX
1.3 多選按鈕 Check Box
按鈕樣式:BS_CHECKBOX/BS_AUTOCHECKBOX
1.4 單選按鈕 Radio Box
按鈕樣式:BS_RADIOBUTTON/
BS_AUTORADIOBUTTON
2 下壓式按鈕的使用
2.1 創建按鈕
創建時使用BUTTON
2.2 命令消息
BN_CLICKED消息: 當點擊按鈕通過
WM_COMMAND消息通知父窗口
2.3 通知消息
SendMessage
3 分組按鈕
3.1 創建分組按鈕
3.2 經常使用于對窗口內控件劃分區域,增加
界面的友好性
4 多選按鈕 CheckBox
4.1 創建使用 BS_CHECKBOX/BS_AUTOCHECKBOX
BS_AUTOCHECKBOX 選擇狀態系統自動保護
BS_CHECKBOX 選擇狀態需要自己保護
4.2 命令響應
BN_CLICKED 通過WM_COMMAND消息
4.3 通知消息
BM_GETCHECK 獲得當前按鈕被選擇的狀態
BM_SETCHECK 設置當前按鈕被選擇的狀態
wParam 用于設置狀態標示
狀態: BST_CHECKED 或 BST_UNCHECKED
5 單選按鈕 RadioBox
5.1 創建使用 BS_RADIOBUTTON/BS_AUTORADIOBUTTON
BS_AUTORADIOBUTTON 選擇狀態系統自動保護
BS_RADIOBUTTON 選擇狀態需要自己保護
注意:
RadionBox分組 - 使用WS_GROUP樣式,可以將
RadionBox分成多個組.
A CreateWindow ( ,,,WS_GROUP );
B CreateWindow...
C CreateWindow ( ,,,WS_GROUP );
D CreaetWindow...
A和B是1組, C和D是1組
5.2 命令響應
BN_CLICKED 通過WM_COMMAND消息
5.3 通知消息
與CheckBox類似
// WinButton.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
HINSTANCE g_hInst = NULL;
void OnCreate( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{ //PUSH BUTTON
CreateWindow( "BUTTON", "PushButton",
WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
100, 50, 100, 30,
hWnd, (HMENU)1001, g_hInst, NULL );
//3態按鈕
CreateWindow( "BUTTON", "Auto3State",
WS_CHILD|WS_VISIBLE|BS_AUTO3STATE|BS_PUSHLIKE,
100, 100, 100, 30,
hWnd, (HMENU)2001, g_hInst, NULL );
//分組按鈕
CreateWindow( "BUTTON", "分組1",
WS_CHILD|WS_VISIBLE|BS_GROUPBOX,
50, 30, 300, 300,
hWnd, (HMENU)3001, g_hInst, NULL );
//多選按鈕 CheckBox
CreateWindow( "BUTTON", "選項1",
WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX,
100, 150, 100, 30,
hWnd, (HMENU)4001, g_hInst, NULL );
CreateWindow( "BUTTON", "選項2",
WS_CHILD|WS_VISIBLE|BS_CHECKBOX,
100, 180, 100, 30,
hWnd, (HMENU)4002, g_hInst, NULL );
// 單選按鈕
CreateWindow( "BUTTON", "A",
WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON|WS_GROUP,
100, 240, 100, 30, hWnd,
(HMENU)5001, g_hInst, NULL );
CreateWindow( "BUTTON", "B",
WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,
100, 270, 100, 30, hWnd,
(HMENU)5002, g_hInst, NULL );
CreateWindow( "BUTTON", "C",
WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON|WS_GROUP,
100, 300, 100, 30, hWnd,
(HMENU)5003, g_hInst, NULL );
CreateWindow( "BUTTON", "D",
WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,
100, 330, 100, 30, hWnd,
(HMENU)5004, g_hInst, NULL );
}
void OnCommand( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
int nNotifyCode = HIWORD( wParam );
int nEventID = LOWORD( wParam );
switch( nEventID )
{
case 1001:
{
switch( nNotifyCode )
{
case BN_CLICKED:
MessageBox( NULL, "Hello PushButton",
"WinButton", MB_OK );
break;
}
}
break;
case 4002:
{
HWND hCtrl = GetDlgItem( hWnd, 4002 );
LRESULT nCheck = 0;
switch( nNotifyCode )
{
case BN_CLICKED:
//獲得當前CheckBox的狀態
nCheck = SendMessage( hCtrl,
BM_GETCHECK, 0, 0 );
//判斷當前狀態是不是被選擇
if( nCheck & BST_CHECKED )
{ //設置為不選擇狀態
SendMessage( hCtrl,BM_SETCHECK,
BST_UNCHECKED, 0 );
}
else
{ //設置成選擇狀態
SendMessage( hCtrl,BM_SETCHECK,
BST_CHECKED, 0 );
}
break;
}
}
break;
}
}
LRESULT CALLBACK WndProc( HWND hWnd,
UINT nMsg,
WPARAM wParam,
LPARAM lParam )
{
switch( nMsg )
{
case WM_CREATE:
OnCreate( hWnd, nMsg, wParam, lParam );
break;
case WM_COMMAND:
OnCommand( hWnd, nMsg, wParam, lParam );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, nMsg,
wParam, lParam );
}
BOOL RegisterWnd( LPSTR pszClassName )
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof( wce );
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.hbrBackground = HBRUSH(COLOR_WINDOW);
wce.hCursor = NULL;
wce.hIcon = NULL;
wce.hIconSm = NULL;
wce.hInstance = g_hInst;
wce.lpfnWndProc = WndProc;
wce.lpszClassName = pszClassName;
wce.lpszMenuName = NULL;
wce.style = CS_HREDRAW|CS_VREDRAW;
ATOM nAtom = RegisterClassEx( &wce );
if( 0 == nAtom )
{
return FALSE;
}
return TRUE;
}
HWND CreateWnd( LPSTR pszClassName )
{
HWND hWnd = CreateWindowEx( 0,
pszClassName, "MyWnd",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, NULL, NULL, g_hInst,
NULL );
return hWnd;
}
void DisplayWnd( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}
void Message( )
{
MSG msg = { 0 };
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
g_hInst = hInstance;
RegisterWnd( "MYWND" );
HWND hWnd = CreateWnd( "MYWND" );
DisplayWnd( hWnd );
Message( );
return 0;
}
文本編輯框
1 文本編輯框的樣式
1.1 單行文本編輯框 -默許樣式
1.2 多行文本編輯框 - ES_MULTILINE
1.3 密碼文本編輯框 - ES_PASSWORD
2 文本編輯框的使用
2.1 創建
窗口類名稱EDIT.
2.2 Notify消息
EN_CHANGE 當編輯框內容產生變化時,
會通知父窗口
2.3 EDIT窗口消息
EM_SETSEL 選擇消息 WPARAM是起始字符位置
LPARAM是終止字符位置
窗口消息: WM_COPY, WM_PASET,WM_CUT等消息
WM_SETTEXT, WM_GETTEXT, WM_GETTEXTLEN
SetWindowText
GetWindowText/GetWindowTextLen
// WinEdit.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"
#include "resource.h"
HINSTANCE g_hInst = NULL;
HWND g_hEdit = NULL;
void OnCreate( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
g_hEdit = CreateWindow( "EDIT", "Hello EDIT",
WS_CHILD|WS_VISIBLE|WS_HSCROLL|
WS_VSCROLL|ES_AUTOHSCROLL|
ES_AUTOVSCROLL|ES_MULTILINE,
0, 0, 100, 200, hWnd,
(HMENU)1001, g_hInst, NULL );
}
void OnSize( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
int nWidth = LOWORD( lParam );
int nHeight= HIWORD( lParam );
if( NULL != g_hEdit )
{ //將EDIT窗口填滿全部客戶區
MoveWindow( g_hEdit, 0, 0, nWidth,
nHeight, TRUE );
}
}
void OnSave( )
{
//獲得文字長度
LRESULT nTextLen = SendMessage( g_hEdit,
WM_GETTEXTLENGTH, 0, 0 );
//獲得文字
CHAR * pszBuff = NULL;
pszBuff = (CHAR *)malloc( nTextLen + 1 );
memset( pszBuff, 0, nTextLen + 1 );
SendMessage( g_hEdit, WM_GETTEXT,
nTextLen + 1, (LPARAM)pszBuff );
//MessageBox( NULL, pszBuff, "WinEdit", MB_OK );
//保存文件
FILE * pFile = fopen( "C:\\1.txt", "w+" );
fwrite( pszBuff, nTextLen, 1, pFile );
fclose( pFile );
//釋放內存
free( pszBuff );
}
void OnOpen( )
{
//打開文件讀取數據
FILE * pFile = fopen( "C:\\1.txt", "r" );
//獲得文件長度
fseek( pFile, 0, SEEK_END );
long nFileLen = ftell( pFile );
fseek( pFile, 0, SEEK_SET );
//讀取文件數據
CHAR * pszBuf = (CHAR *)
malloc( nFileLen + 1 );
memset( pszBuf, 0, nFileLen + 1 );
fread( pszBuf, nFileLen, 1, pFile );
//關閉文件
fclose( pFile );
//將字符顯示在EDIT窗口
SendMessage( g_hEdit, WM_SETTEXT,
0, (LPARAM)pszBuf );
//釋放內存
free( pszBuf );
}
void OnCommand( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
int nNotifyCode = HIWORD( wParam );
int nEventID = LOWORD( wParam );
switch( nEventID )
{
case 1001:
{
switch( nNotifyCode )
{
case EN_CHANGE:
//MessageBox( NULL, "EN_CHANGE",
// "WinEdit", MB_OK );
break;
}
}
break;
case ID_SELALL:
SendMessage( g_hEdit, EM_SETSEL, 0, ⑴ );
break;
case ID_COPY:
SendMessage( g_hEdit, WM_COPY, 0, 0 );
break;
case ID_PASTE:
SendMessage( g_hEdit, WM_PASTE, 0, 0 );
break;
case ID_SAVE:
OnSave( );
break;
case ID_OPEN:
OnOpen( );
break;
}
}
LRESULT CALLBACK WndProc( HWND hWnd,
UINT nMsg,
WPARAM wParam,
LPARAM lParam )
{
switch( nMsg )
{
case WM_CREATE:
OnCreate( hWnd, nMsg, wParam, lParam );
break;
case WM_SIZE:
OnSize( hWnd, nMsg, wParam, lParam );
break;
case WM_COMMAND:
OnCommand( hWnd, nMsg, wParam, lParam );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, nMsg,
wParam, lParam );
}
BOOL RegisterWnd( LPSTR pszClassName )
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof( wce );
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.hbrBackground = HBRUSH(COLOR_WINDOW);
wce.hCursor = NULL;
wce.hIcon = NULL;
wce.hIconSm = NULL;
wce.hInstance = g_hInst;
wce.lpfnWndProc = WndProc;
wce.lpszClassName = pszClassName;
wce.lpszMenuName = NULL;
wce.style = CS_HREDRAW|CS_VREDRAW;
ATOM nAtom = RegisterClassEx( &wce );
if( 0 == nAtom )
{
return FALSE;
}
return TRUE;
}
HWND CreateWnd( LPSTR pszClassName )
{
HMENU hMenu = LoadMenu( g_hInst,
MAKEINTRESOURCE(IDR_MAIN) );
HWND hWnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
pszClassName, "我的記事本",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, NULL, hMenu, g_hInst,
NULL );
return hWnd;
}
void DisplayWnd( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}
void Message( )
{
MSG msg = { 0 };
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
g_hInst = hInstance;
RegisterWnd( "MYWND" );
HWND hWnd = CreateWnd( "MYWND" );
DisplayWnd( hWnd );
Message( );
return 0;
}
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈