[求救] windows api 创建程序调试 一直有错,急求帮助

achang21 2010-07-26 10:08:44
我的程序如下:


# include<windows.h>
# include<stdio.h>



LRESULT CALLBACK WindowLiProc(WNDPROC lpPrevWndFunc,
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);


int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_WINLOGO);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WindowLiProc;
wndcls.lpszClassName="CheersLi01";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls);

HWND hwnd;
hwnd=CreateWindow("CheersLi01","Cheers Li Api 学习",WS_OVERLAPPEDWINDOW,0,0,800,600,NULL,NULL,hInstance,NULL);

ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);

MSG msg;

while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;

}



WindowLiProc(WNDPROC lpPrevWndFunc,
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
switch(uMsg)
{
case WM_CHAR :
char szChar[20];
sprintf(szChar,"Char is %d",wParam);
MessageBox(hwnd,szChar,"CheersLi01",0);
break;
case WM_LBUTTONDOWN :
MessageBox(hwnd,"mouse click","CheersLi01",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"我的C++学习",ARRAYSIZE("我的C++学习"));
ReleaseDC(hwnd,hdc);
case WM_PAINT :
HDC hDc;
PAINTSTRUCT ps;
hDc=BeginPaint(hwnd,&ps);
TextOut(hDc,0,50,"C++ Programming",ARRAYSIZE("C++ Programming"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE :
if(IDYES==MessageBox(hwnd,"是否真的结束?","Hints for you",0))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY :
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}

return 0;
}






我在vs2008 下运行,找了半天还是调试有错误,希望大家帮我,我已经折腾的筋疲力尽了,提前谢过^_^


我编译一直报错如下:
1>------ 已启动生成: 项目: WinMain, 配置: Debug Win32 ------
1>正在编译...
1>WinMain.cpp
1>d:\c++\sunxin_practice\chapter01\winmain\winmain\winmain.cpp(26) : error C2440: “=”: 无法从“LRESULT (__stdcall *)(WNDPROC,HWND,UINT,WPARAM,LPARAM)”转换为“WNDPROC”
1> 该转换要求 reinterpret_cast、C 样式转换或函数类型转换
1>d:\c++\sunxin_practice\chapter01\winmain\winmain\winmain.cpp(56) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>d:\c++\sunxin_practice\chapter01\winmain\winmain\winmain.cpp(56) : error C2556: “int WindowLiProc(WNDPROC,HWND,UINT,WPARAM,LPARAM)”: 重载函数与“LRESULT WindowLiProc(WNDPROC,HWND,UINT,WPARAM,LPARAM)”只是在返回类型上不同
1> d:\c++\sunxin_practice\chapter01\winmain\winmain\winmain.cpp(6) : 参见“WindowLiProc”的声明
1>d:\c++\sunxin_practice\chapter01\winmain\winmain\winmain.cpp(56) : error C2373: “WindowLiProc”: 重定义;不同的类型修饰符
1> d:\c++\sunxin_practice\chapter01\winmain\winmain\winmain.cpp(6) : 参见“WindowLiProc”的声明
1>生成日志保存在“file://d:\C++\sunxin_practice\chapter01\WinMain\WinMain\Debug\BuildLog.htm”
1>WinMain - 4 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
...全文
162 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
achang21 2010-07-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liyinlei 的回复:]
窗口处理过程函数 是如下定义:

LRESULT CALLBACK WindowProc( HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
[/Quote]

非常感谢你!按照 wltg2001 方法问题解决了!
liyinlei 2010-07-26
  • 打赏
  • 举报
回复
窗口处理过程函数 是如下定义:

LRESULT CALLBACK WindowProc( HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
achang21 2010-07-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wltg2001 的回复:]
LRESULT CALLBACK WindowLiProc(WNDPROC lpPrevWndFunc,
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
================
这是窗口处理函数,它怎么有五个参数啊?窗口处理函数的原型是固定的,只能是这样的:
LRESULT CALLBACK Wind……
[/Quote]

wltg2001 太感谢你了! 按照你说指出的,改了后程序可以运行了!真是帮了我大忙了,感激之情无以言表!以后继续想你学习,呵呵!
wltg2001 2010-07-26
  • 打赏
  • 举报
回复
LRESULT CALLBACK WindowLiProc(WNDPROC lpPrevWndFunc,
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
================
这是窗口处理函数,它怎么有五个参数啊?窗口处理函数的原型是固定的,只能是这样的:
LRESULT CALLBACK WindowProc( HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
你上面那个怎么多了个WNDPROC lpPreWndFunc啊?去掉吧。

WindowLiProc(WNDPROC lpPrevWndFunc,
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
....
===========
这是窗口处理函数的实现部分,同样有上面的问题,除些之外,实现部分的函数头应该和声明是一样的,所以应该写成这样:
LRESULT CALLBACK WindowLiProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
switch(uMsg)

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧