这个是人家的,可以运行:
#include <afxwin.h>
HINSTANCE g_hInstance = 0;
//窗口处理函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);//可以使GetMessage返回0
break;
case WM_CREATE:
{
CREATESTRUCT crt = *((CREATESTRUCT*)lParam);
char buf[256] = { 0 };
sprintf(buf, "创建的窗口类名称是%s,窗口名称是%s", crt.lpszClass, crt.lpszName);
MessageBox(NULL, buf, "消息处理", MB_OK);
}
case WM_QUIT:
{
int param = (int)wParam;
char buf[256];
sprintf(buf, "进程退出,退出码:%d", param);
MessageBox(NULL, buf, "消息处理", MB_OK);
}
case WM_SYSCOMMAND:
{
if (wParam == SC_MAXIMIZE)
{
short x = LOWORD(lParam);
short y = HIWORD(lParam);
char buf[256];
sprintf(buf, "窗口最大化,x坐标:%d,y坐标:%d", x, y);
MessageBox(NULL, buf, "消息处理", MB_OK);
}
}
case WM_SIZE:
{
if (wParam == SIZE_MAXIMIZED)
{
short width = LOWORD(lParam);
short hight = HIWORD(lParam);
char buf[256];
sprintf(buf, "窗口最大化,高度:%d,宽度:%d", hight, width);
MessageBox(NULL, buf, "消息处理", MB_OK);
}
}
default:
break;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
//注册窗口类
BOOL Register(LPSTR lpClassName, WNDPROC wndProc)
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof(wce);
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wce.hCursor = NULL;
wce.hIcon = NULL;
wce.hIconSm = NULL;
wce.hInstance = g_hInstance;
wce.lpfnWndProc = wndProc;
wce.lpszClassName = lpClassName;
wce.lpszMenuName = NULL;
wce.style = CS_HREDRAW | CS_VREDRAW;
ATOM nAtom = RegisterClassEx(&wce);
if (nAtom == 0)
return FALSE;
return true;
}
//创建主窗口
HWND CreateMain(LPSTR lpClassName, LPSTR lpWndName)
{
HWND hWnd = CreateWindowEx(0, lpClassName, lpWndName,
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, g_hInstance, NULL);
return hWnd;
}
//显示窗口
void Display(HWND hWnd)
{
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
}
//消息循环
void Message()
{
MSG nMsg = { 0 };
while (GetMessage(&nMsg, NULL, 0, 0))
{
TranslateMessage(&nMsg);
DispatchMessage(&nMsg);
}
}
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
// TODO: Place code here.
char a[50]= "Main";
g_hInstance = hInstance;
BOOL nRet = Register(a, WndProc);
if (!nRet)
{
MessageBox(NULL, "注册失败", "Infor", MB_OK);
return 0;
}
char b[50] = "window";
HWND hWnd = CreateMain(a, b);
CreateWindow("Main", "子窗口",
WS_CHILD | WS_VISIBLE | WS_POPUP, 200, 400, 400, 400,
hWnd, NULL, g_hInstance, NULL);
Display(hWnd);
Message();
return 0;
}
下面是我的,按书上格式写的:
头文件tou.h:
class CMyFrameWnd :public CFrameWnd {};
class CMyWinApp :public CWinApp {
public:
CMyWinApp()
{
}
virtual BOOL InitInstance();
};
class CMainWindow : public CFrameWnd
{
protected:
public:
CMainWindow();
protected:
afx_msg void OnPaint();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
DECLARE_MESSAGE_MAP()
};
下面是源.cpp文件:
#include <afxwin.h>
#include "tou.h"
CMyWinApp theapp;
BOOL CMyWinApp::InitInstance()
{
m_pMainWnd = new CMainWindow;
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}
BEGIN_MESSAGE_MAP(CMainWindow, CFrameWnd)
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
ON_WM_SETCURSOR()
END_MESSAGE_MAP()
CMainWindow::CMainWindow()
{
CRect rect1(0, 0, GetSystemMetrics(SM_CXSCREEN) / 2, GetSystemMetrics(SM_CYSCREEN) / 2);
char aa[50] = "Main";
char bb[50] = "window";
HINSTANCE g_hInstance = 0;
HWND m_hWnd = CreateWindowEx(0, aa, bb,
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, g_hInstance, NULL);
CreateWindow("Main", "子窗口",
WS_OVERLAPPEDWINDOW | WS_CHILD | WS_VISIBLE | WS_POPUP, CW_USEDEFAULT, CW_USEDEFAULT, 400, 200,
m_hWnd, NULL, g_hInstance, NULL);
}
void CMainWindow::OnPaint()
{
}
void CMainWindow::OnLButtonDown(UINT nFlags, CPoint point)
{
}
我的程序一运行就有winocc.cpp的断言报错
不知道有没有人能赐教!