#include <windows.h>LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPreInstance,
LPSTR lpCmdLine,
int nCmdShow)
{ static TCHAR szAppName[] = TEXT("Hello Window!");
HWND hwnd;
MSG msg;
WNDCLASS wndClass; wndClass.style = CS_HREDRAW | CS_VREDRAW;
wndClass.lpfnWndProc = WndProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance = hInstance;
wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndClass.lpszMenuName = NULL;
wndClass.lpszClassName = szAppName; if(!RegisterClass(&wndClass))
{
MessageBox(NULL, TEXT("Error!"), szAppName, MB_ICONERROR);
return 0;
} hwnd = CreateWindow(
szAppName,
TEXT("The Hello Program!"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL); ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd); while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
} return msg.wParam;
}LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
我是用记事本写的,然后是用Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86进行编译:
cl 024.c user32.lib gdi32.lib刚开始把return DefWindowProc(hwnd, message, wParam, lParam);这行代码写成了:
return DefWindowProc(hwnd, message, lParam, wParam);导致代码一直无法显示窗口。
反复的查资料也没有发现程序有错,一直到现在才发现原来是这句出错了,由于我的C语言基础也不好(C语言学习还不到两周),有一点我不明白,wParam为 unsigned int,lParam 为 long,为什么编译不提示呢?望各位高手指点,谢谢!
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPreInstance,
LPSTR lpCmdLine,
int nCmdShow)
{ static TCHAR szAppName[] = TEXT("Hello Window!");
HWND hwnd;
MSG msg;
WNDCLASS wndClass; wndClass.style = CS_HREDRAW | CS_VREDRAW;
wndClass.lpfnWndProc = WndProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance = hInstance;
wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndClass.lpszMenuName = NULL;
wndClass.lpszClassName = szAppName; if(!RegisterClass(&wndClass))
{
MessageBox(NULL, TEXT("Error!"), szAppName, MB_ICONERROR);
return 0;
} hwnd = CreateWindow(
szAppName,
TEXT("The Hello Program!"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL); ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd); while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
} return msg.wParam;
}LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
我是用记事本写的,然后是用Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86进行编译:
cl 024.c user32.lib gdi32.lib刚开始把return DefWindowProc(hwnd, message, wParam, lParam);这行代码写成了:
return DefWindowProc(hwnd, message, lParam, wParam);导致代码一直无法显示窗口。
反复的查资料也没有发现程序有错,一直到现在才发现原来是这句出错了,由于我的C语言基础也不好(C语言学习还不到两周),有一点我不明白,wParam为 unsigned int,lParam 为 long,为什么编译不提示呢?望各位高手指点,谢谢!
“有一点我不明白,wParam为 unsigned int,lParam 为 long,为什么编译不提示呢?”这句我没看懂,为什么要提示??我写反了啊!