为什么这段代码粘贴进c++编译器不能运行
#include<windows.h>LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);intPASCALWinMain(H...
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int PASCAL WinMain(
HINSTANCE hInstance, // 应用程序的实例句柄
HINSTANCE hPrevInstance, // 该应用程序前一个实例的句柄
LPSTR lpszCmdLine, // 命令行参数串
int nCmdShow) // 程序在初始化时如何显示窗口
{
char szAppName[] = "Window";
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
if (!hPrevInstance) {
// 该实例是程序的第一个实例,注册窗口类
wndclass.style = CS_VREDRAW | CS_HREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
if (!RegisterClass(&wndclass))
// 如果注册失败
return FALSE;
}
// 对每个实例,创建一个窗口对象
hwnd = CreateWindow(
szAppName,
"Sample 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;
}
为什么我加了wndproc的实例后还是运行不了 展开
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int PASCAL WinMain(
HINSTANCE hInstance, // 应用程序的实例句柄
HINSTANCE hPrevInstance, // 该应用程序前一个实例的句柄
LPSTR lpszCmdLine, // 命令行参数串
int nCmdShow) // 程序在初始化时如何显示窗口
{
char szAppName[] = "Window";
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
if (!hPrevInstance) {
// 该实例是程序的第一个实例,注册窗口类
wndclass.style = CS_VREDRAW | CS_HREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
if (!RegisterClass(&wndclass))
// 如果注册失败
return FALSE;
}
// 对每个实例,创建一个窗口对象
hwnd = CreateWindow(
szAppName,
"Sample 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;
}
为什么我加了wndproc的实例后还是运行不了 展开
5个回答
展开全部
你这个程序中的回调函数只做了声明,而没有进行定义(就是写内容),系统不知道这个回调函数是干什么的,所以没有办法执行,你要在这个程序后面加上回调函数的定义以实现它的功能,格式像这样:(这只是一种写法)
LRESULT CALLBACK WndProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(uMsg)
{
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);
TextOut(hDC,0,0,"Cashey's Sample",strlen("Cashey's Sample"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES == MessageBox(hwnd,"是否真的结束?","关闭",MB_YESNO))
{DestroyWindow(hwnd);}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
LRESULT CALLBACK WndProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(uMsg)
{
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);
TextOut(hDC,0,0,"Cashey's Sample",strlen("Cashey's Sample"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES == MessageBox(hwnd,"是否真的结束?","关闭",MB_YESNO))
{DestroyWindow(hwnd);}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
展开全部
函数WndProc()只有声明,没有定义。
这是WINDOWS应用程序的必要的函数。
WndProc名称可以任意规定,
但是主函数中
wndclass.lpfnWndProc = WndProc;
必须要有对应的名称。
例如如果定义为Proc()
则
wndclass.lpfnWndProc = Proc;
我这里有个WndProc ()实例。
LRESULT CALLBACK WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CREATE:
return 0 ;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case 40001:
SendMessage(hWnd,WM_CLOSE, (WPARAM)0, (LPARAM)0);
break;
}//switch
break ;
case WM_DESTROY:
PostQuitMessage (0);
return 0 ;
}
return DefWindowProc (hWnd, uMsg, wParam, lParam) ;
}
其中,switch (uMsg)是个消息分支。
每个分支WM_CREATE、WM_COMMAND和WM_DESTROY等是窗口的窗口消息。
具体需要那些窗口消息,建议你找Windows应用程序编程相关内容。
你只要适当的修改即使用。
这是WINDOWS应用程序的必要的函数。
WndProc名称可以任意规定,
但是主函数中
wndclass.lpfnWndProc = WndProc;
必须要有对应的名称。
例如如果定义为Proc()
则
wndclass.lpfnWndProc = Proc;
我这里有个WndProc ()实例。
LRESULT CALLBACK WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CREATE:
return 0 ;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case 40001:
SendMessage(hWnd,WM_CLOSE, (WPARAM)0, (LPARAM)0);
break;
}//switch
break ;
case WM_DESTROY:
PostQuitMessage (0);
return 0 ;
}
return DefWindowProc (hWnd, uMsg, wParam, lParam) ;
}
其中,switch (uMsg)是个消息分支。
每个分支WM_CREATE、WM_COMMAND和WM_DESTROY等是窗口的窗口消息。
具体需要那些窗口消息,建议你找Windows应用程序编程相关内容。
你只要适当的修改即使用。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你应该是工程建错了,应该是Win32 application工程。你看一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
函数WndProc()只有声明,没有定义。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
函数WndProc()只有声明
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询