VC++視覺化程式設計第一個程式設計例項出錯

xiao__ou發表於2018-04-06

VC++視覺化程式設計第一個程式設計例項出錯解決方案

        今年學校開設了VC++物件導向與視覺化程式設計這本書,於是這幾天開始上手,第一程式是按照清華大學出版社出版的這本書上敲的,在vs2013裡面死活執行不成功。RegisterClassex()註冊視窗類的時候老顯示“視窗註冊類失敗”,百度了好長一段時間才得到解決問題。

        其實問題很簡單,用WNDCLASSEX定義了一個視窗類時候,要對它進行初始化;比如:WNDCLASSEX wcex = {0};//0寫不寫無所謂。

        在建立視窗的時候程式碼執行程式如下:

RegisterClassEX(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_TESTWIN));
  wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
  wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
  wcex.lpszMenuName = MAKEINTRESOURCE(IDC_TESTWIN);
  wcex.lpszClassName = szWindowClass;
  wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
  return RegisterClassEx(&wcex);
 }

        呼叫的時候,需要為每個成員賦值了,有些不理解的成員變數或者自己不關心的成員變數有的地方出錯,我們新手都不知道哪裡出錯了,所以如果加上WNDCLASSEX wcex = {},對於我們來說比較方便,便於以後再去深層次的研究WNDCLASSEX的成員變數。

         成功執行的程式碼如下:

#include<Windows.h>
#include<tchar.h>
#define WINDOW_WIDTH 800 //視窗寬度
#define WINDOW_HEIGHT 600 

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow){
	WNDCLASSEX wcex = {};
	HWND hwnd;
	MSG msg;
	TCHAR szwindowsclass[] = L"視窗例項";
	TCHAR sztitle[] = L"my windows";

	wcex.cbSize = sizeof(WNDCLASSEX);
	wcex.style = CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc = WndProc;
	wcex.cbWndExtra = 0;
	wcex.cbWndExtra = 0;
	wcex.hInstance = hInstance;
	wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
	wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
	wcex.lpszMenuName = NULL;
	wcex.lpszClassName = szwindowsclass;
	wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));

	if (!RegisterClassEx(&wcex)){
		MessageBox(NULL, _T("視窗類註冊失敗!"), _T("視窗註冊"), NULL);
		return 1;
	}

	hwnd = CreateWindow(
		szwindowsclass,
		sztitle,
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, CW_USEDEFAULT,
		WINDOW_WIDTH, WINDOW_HEIGHT,
		NULL,
		NULL,
		hInstance,
		NULL
		);
	if (!hwnd){
		MessageBox(NULL, L"建立視窗失敗", _T("建立視窗"), NULL);
		return 1;
	}
	ShowWindow(hwnd, ncmdshow);
	UpdateWindow(hwnd);
	while (GetMessage(&msg, NULL, 0, 0)){
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return(int)msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam){
	switch (message)
	{
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hwnd,message,wparam,lparam);
		break;
	}
	return 0;
}

執行結果如圖:



相關文章