有这个函数:
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);我定义一个指向它的指针:
typedef LRESULT (CALLBACK* PWNPROC)(HWND,UINT,WPARAM,LPARAM);编译时出了1个错误:
'InitWindow' : cannot convert parameter 2 from 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)' to 'long'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast请问这是什么错误?如何改呢?
================================================================#include <windows.h>HWND InitWindow(HINSTANCE,LRESULT,INT);
VOID MsgProc(MSG*);
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
typedef LRESULT (CALLBACK* PWNDPROC)(HWND,UINT,WPARAM,LPARAM);INT WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR pCmdLine,INT iShowCmd)
{
HWND hwnd;
MSG msg;
hwnd=InitWindow(hInstance,WndProc,iShowCmd);
MsgProc(&msg); return msg.wParam;
}VOID MsgProc(MSG* pMsg)
{
while(GetMessage(pMsg,NULL,0,0))
{
TranslateMessage(pMsg);
DispatchMessage(pMsg);
}
}HWND InitWindow(HINSTANCE hInstance,PWNDPROC pWndProc,INT iShowCmd)
{
TCHAR szAppName[]=TEXT("HelloWin");
HWND hwnd;
MSG msg;
WNDCLASS wndclass; wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc=pWndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetSysColor(COLOR_BTNFACE);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=szAppName; if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This program requires Windows2000/XP"),szAppName,MB_ICONERROR);
return 0;
} hwnd=CreateWindow(szAppName,TEXT("HelloWin"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,iShowCmd);
UpdateWindow(hwnd); return hwnd;
}LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect; switch(message)
{
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
DrawText(hdc,TEXT("Hello,Windows2000!"),-1,&rect,DT_SINGLELINE);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
}
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);我定义一个指向它的指针:
typedef LRESULT (CALLBACK* PWNPROC)(HWND,UINT,WPARAM,LPARAM);编译时出了1个错误:
'InitWindow' : cannot convert parameter 2 from 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)' to 'long'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast请问这是什么错误?如何改呢?
================================================================#include <windows.h>HWND InitWindow(HINSTANCE,LRESULT,INT);
VOID MsgProc(MSG*);
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
typedef LRESULT (CALLBACK* PWNDPROC)(HWND,UINT,WPARAM,LPARAM);INT WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR pCmdLine,INT iShowCmd)
{
HWND hwnd;
MSG msg;
hwnd=InitWindow(hInstance,WndProc,iShowCmd);
MsgProc(&msg); return msg.wParam;
}VOID MsgProc(MSG* pMsg)
{
while(GetMessage(pMsg,NULL,0,0))
{
TranslateMessage(pMsg);
DispatchMessage(pMsg);
}
}HWND InitWindow(HINSTANCE hInstance,PWNDPROC pWndProc,INT iShowCmd)
{
TCHAR szAppName[]=TEXT("HelloWin");
HWND hwnd;
MSG msg;
WNDCLASS wndclass; wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc=pWndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetSysColor(COLOR_BTNFACE);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=szAppName; if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This program requires Windows2000/XP"),szAppName,MB_ICONERROR);
return 0;
} hwnd=CreateWindow(szAppName,TEXT("HelloWin"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,iShowCmd);
UpdateWindow(hwnd); return hwnd;
}LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect; switch(message)
{
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
DrawText(hdc,TEXT("Hello,Windows2000!"),-1,&rect,DT_SINGLELINE);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
}
解决方案 »
- 求助:使用OPENCV读取过1位位图
- 两个应用程序之间怎么共享一个全局队列啊?(在线等 转自Delphi版)
- Visual C++环境下如何调用Borland C++建立的函数库?
- 问一个ACTIVEX的问题,200分
- 怎样找回CLASSVIEW中隐藏的类
- timeSetEvent真的能获得1ms的周期吗?如果我的回调函数在1ms内完成的话
- windows系统编程,vxd技术编程大侠请进!!不够加分!!
- 怎样传送变量给::GetDefaultConnect(),以实现 SQL Server和Oracle登录?
- 高分紧急求助:鼠标点击视图的异常
- 关于弹出式菜单
- 如何让STL对象穿越BCB和VC两个编译器
- Nehe的opengl第一课的CPU占用问题
HWND InitWindow(HINSTANCE,LRESULT,INT);
改为:
HWND InitWindow(HINSTANCE,PWNPROC,INT);
试一下看可不可以。
typedef LRESULT (CALLBACK* PWNDPROC)(HWND,UINT,WPARAM,LPARAM);
应该放在函数声明的前面。
试看看。
改成这样
typedef LRESULT (CALLBACK* PWNDPROC)(HWND,UINT,WPARAM,LPARAM);
HWND InitWindow(HINSTANCE,PWNDPROC,INT);
VOID MsgProc(MSG*);
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);