下面是我寫的代碼,還請大佬給出解決辦法.

#include<Windows.h>
#include"iostream"
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ExeProc(HWND, UINT, WPARAM, LPARAM);
using namespace std;
//WINAPI 用來說明在Windows中,引數是如何傳遞的。WinMain 相當于標準語言中的main()入口函式
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int nCmdShow)
{
HWND hwnd,hWnd; //用一個變數存放視窗句柄
MSG msg; //用一個變數存放訊息
WNDCLASS wc,wcg;//視窗類
//1.設計一個視窗類
wc.style = 0; //視窗的樣式
wc.lpfnWndProc = (WNDPROC)WndProc; //指向視窗程序函式的指標
wc.cbClsExtra = 0; //視窗類附加資料
wc.cbWndExtra = 0; //視窗附加資料
wc.hInstance = hInstance; //實體句柄
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO); //圖示句柄
wc.hCursor = LoadCursor(NULL, IDC_ARROW); //滑鼠句柄
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); //背景句柄
wc.lpszMenuName = NULL; //視窗選單
wc.lpszClassName = TEXT("MyWndClass"); //視窗類的名字
wcg.style = 0; //視窗的樣式
wcg.lpfnWndProc = (WNDPROC)ExeProc; //指向視窗程序函式的指標
wcg.cbClsExtra = 0; //視窗類附加資料
wcg.cbWndExtra = 0; //視窗附加資料
wcg.hInstance = hInstance; //實體句柄
wcg.hIcon = LoadIcon(NULL, IDI_WINLOGO); //圖示句柄
wcg.hCursor = LoadCursor(NULL, IDC_ARROW); //滑鼠句柄
wcg.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); //背景句柄
wcg.lpszMenuName = NULL; //視窗選單
wcg.lpszClassName = TEXT("MyWindow"); //視窗類的名字
//2.注冊視窗類
RegisterClass(&wc);
RegisterClass(&wcg);
//3.創建視窗
hwnd = CreateWindow(
TEXT("MyWndClass"), //視窗類的名稱
TEXT("Hello SDK Application"), //視窗的標題
WS_OVERLAPPEDWINDOW, //視窗的樣式
//視窗的位置(x,y)和大小(下面的均為默認)
CW_USEDEFAULT, //視窗的位置x坐標
CW_USEDEFAULT, //視窗的位置y坐標
CW_USEDEFAULT, //視窗的大小—寬度
CW_USEDEFAULT, //視窗的大小—高度
NULL, //視窗的父視窗句柄
NULL, //視窗選單句柄
hInstance, //實體句柄
NULL //附加資料
);
hWnd = CreateWindow(
TEXT("MyWindow"), //視窗類的名稱
TEXT("Hello World"), //視窗的標題
WS_OVERLAPPEDWINDOW, //視窗的樣式
//視窗的位置(x,y)和大小(下面的均為默認)
CW_USEDEFAULT, //視窗的位置x坐標
CW_USEDEFAULT, //視窗的位置y坐標
CW_USEDEFAULT, //視窗的大小—寬度
CW_USEDEFAULT, //視窗的大小—高度
NULL, //視窗的父視窗句柄
NULL, //視窗選單句柄
hInstance, //實體句柄
NULL //附加資料
);
//4.顯示和更新視窗
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
//5.訊息回圈
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg); //翻譯鍵盤訊息
DispatchMessage(&msg); //轉發到視窗程序
}
return msg.wParam;
}
//撰寫視窗程序函式
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps; //繪畫結構
HDC hdc; //DC句柄
//對各種訊息進行處理
switch (message)
{
case WM_PAINT: //繪制訊息
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 100, 100, L"第一個Windows程式", lstrlen(L"第一個Windows程式"));
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY: //銷毀視窗訊息(關閉)
PostQuitMessage(0);
break;
case WM_CLOSE: //彈出提示關閉的視窗
if (IDCANCEL == MessageBox(hwnd, L"是否關閉視窗?", L"提示訊息", MB_OKCANCEL | MB_ICONQUESTION))
break;
else
return DefWindowProc(hwnd, message, wParam, lParam);
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
LRESULT CALLBACK ExeProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps; //繪畫結構
HDC hdc; //DC句柄
//對各種訊息進行處理
switch (message)
{
case WM_PAINT: //繪制訊息
hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 100, 100, L"Hello,World", lstrlen(L"Hello,World"));
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY: //銷毀視窗訊息(關閉)
PostQuitMessage(0);
break;
case WM_CLOSE: //彈出提示關閉的視窗
if (IDCANCEL == MessageBox(hWnd, L"你真的要關閉視窗?", L"提示訊息", MB_OKCANCEL | MB_ICONQUESTION))
break;
else
return DefWindowProc(hWnd, message, wParam, lParam);
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
uj5u.com熱心網友回復:
#include<Windows.h>
#include"iostream"
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ExeProc(HWND, UINT, WPARAM, LPARAM);
using namespace std;
//WINAPI 用來說明在Windows中,引數是如何傳遞的。WinMain 相當于標準語言中的main()入口函式
HWND g_hwnd,g_hWnd; //用一個變數存放視窗句柄
int g_WinNum=0;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int nCmdShow)
{
MSG msg; //用一個變數存放訊息
WNDCLASS wc,wcg;//視窗類
//1.設計一個視窗類
wc.style = 0; //視窗的樣式
wc.lpfnWndProc = (WNDPROC)WndProc; //指向視窗程序函式的指標
wc.cbClsExtra = 0; //視窗類附加資料
wc.cbWndExtra = 0; //視窗附加資料
wc.hInstance = hInstance; //實體句柄
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO); //圖示句柄
wc.hCursor = LoadCursor(NULL, IDC_ARROW); //滑鼠句柄
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); //背景句柄
wc.lpszMenuName = NULL; //視窗選單
wc.lpszClassName = TEXT("MyWndClass"); //視窗類的名字
wcg.style = 0; //視窗的樣式
wcg.lpfnWndProc = (WNDPROC)ExeProc; //指向視窗程序函式的指標
wcg.cbClsExtra = 0; //視窗類附加資料
wcg.cbWndExtra = 0; //視窗附加資料
wcg.hInstance = hInstance; //實體句柄
wcg.hIcon = LoadIcon(NULL, IDI_WINLOGO); //圖示句柄
wcg.hCursor = LoadCursor(NULL, IDC_ARROW); //滑鼠句柄
wcg.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); //背景句柄
wcg.lpszMenuName = NULL; //視窗選單
wcg.lpszClassName = TEXT("MyWindow"); //視窗類的名字
//2.注冊視窗類
RegisterClass(&wc);
RegisterClass(&wcg);
//3.創建視窗
g_hwnd = CreateWindow(
TEXT("MyWndClass"), //視窗類的名稱
TEXT("Hello SDK Application"), //視窗的標題
WS_OVERLAPPEDWINDOW, //視窗的樣式
//視窗的位置(x,y)和大小(下面的均為默認)
CW_USEDEFAULT, //視窗的位置x坐標
CW_USEDEFAULT, //視窗的位置y坐標
CW_USEDEFAULT, //視窗的大小—寬度
CW_USEDEFAULT, //視窗的大小—高度
NULL, //視窗的父視窗句柄
NULL, //視窗選單句柄
hInstance, //實體句柄
NULL //附加資料
);
//
g_hWnd = CreateWindow(
TEXT("MyWindow"), //視窗類的名稱
TEXT("Hello World"), //視窗的標題
WS_OVERLAPPEDWINDOW, //視窗的樣式
//視窗的位置(x,y)和大小(下面的均為默認)
CW_USEDEFAULT, //視窗的位置x坐標
CW_USEDEFAULT, //視窗的位置y坐標
CW_USEDEFAULT, //視窗的大小—寬度
CW_USEDEFAULT, //視窗的大小—高度
NULL, //視窗的父視窗句柄
NULL, //視窗選單句柄
hInstance, //實體句柄
NULL //附加資料
);
//4.顯示和更新視窗
ShowWindow(g_hwnd,SW_SHOW);
g_WinNum ++;
ShowWindow(g_hWnd,SW_SHOW);
g_WinNum ++;
//5.訊息回圈
while(TRUE)
{// test if there is a message in queue, if so get it
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{ // test if this is a quit
if ((msg.message == WM_QUIT) && (g_WinNum ==0))
{
break;
}
// translate any accelerator keys
TranslateMessage(&msg);
// send the message to the window proc
DispatchMessage(&msg);
} // end if
// main game processing goes here
} // end while
return msg.wParam;
}
//撰寫視窗程序函式
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps; //繪畫結構
HDC hdc; //DC句柄
//對各種訊息進行處理
switch (message)
{
case WM_PAINT: //繪制訊息
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 100, 100, "第一個Windows程式", lstrlen("第一個Windows程式"));
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY: //銷毀視窗訊息(關閉)
g_WinNum--;
PostQuitMessage(0);
break;
case WM_CLOSE: //彈出提示關閉的視窗
if (IDCANCEL == MessageBox(hwnd, "是否關閉視窗?", "提示訊息", MB_OKCANCEL | MB_ICONQUESTION))
break;
else
return DefWindowProc(hwnd, message, wParam, lParam);
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
LRESULT CALLBACK ExeProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps; //繪畫結構
HDC hdc; //DC句柄
//對各種訊息進行處理
switch (message)
{
case WM_PAINT: //繪制訊息
hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 100, 100, "Hello,World", lstrlen("Hello,World"));
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY: //銷毀視窗訊息(關閉)
g_WinNum--;
PostQuitMessage(0);
break;
case WM_CLOSE: //彈出提示關閉的視窗
if (IDCANCEL == MessageBox(hWnd, "你真的要關閉視窗ExeProc?", "提示訊息", MB_OKCANCEL | MB_ICONQUESTION))
break;
else
return DefWindowProc(hWnd, message, wParam, lParam);
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
1
HWND g_hwnd,g_hWnd; //用一個變數存放視窗句柄
int g_WinNum=0;
2
case WM_DESTROY: //銷毀視窗訊息(關閉)
g_WinNum--;
PostQuitMessage(0);
3
//5.訊息回圈
while(TRUE)
{// test if there is a message in queue, if so get it
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{ // test if this is a quit
if ((msg.message == WM_QUIT) && (g_WinNum ==0))
{
break;
}
// translate any accelerator keys
TranslateMessage(&msg);
// send the message to the window proc
DispatchMessage(&msg);
} // end if
// main game processing goes here
} // end while
uj5u.com熱心網友回復:
PostQuitMessage(0); 訊息回圈都退出了,10個視窗都要關閉啊,兩個算什么轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/31909.html
標籤:界面
