类型转换错误,请大家帮忙!

mynamelj 2004-09-03 01:47:06
有一处错误就是填充窗口信息的时候wndclass.lpfnWndProc = myThread::WndProc;
总是说类型转换错误,请大家帮我看看,谢谢了!



/////////////////////////////////////////////////////////////////
//file:thread.h
//这是定义的一个myThread类
class myThread
{
public:
LRESULT WINAPI WndProc(HWND hwnd, // Handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam); // second message parameter

int WINAPI WinMain(HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow);

DWORD WINAPI ThreadProc(LPVOID lParam); //thread process function.

protected:
HWND hwnd;
HANDLE hThread;
WNDCLASS wndclass;
MSG msg;
};


////////////////////////////////////////////////////////////////////////////////
//file:thread.cpp
//

#include <windows.h>
#include "thread.h"


int WINAPI myThread::WinMain(HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow)
{
wndclass.style=CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = myThread::WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hbrBackground=(HBRUSH) GetStockObject(LTGRAY_BRUSH);
wndclass.lpszClassName="SDK Window";
wndclass.lpszMenuName=NULL;

RegisterClass(&wndclass); // Register window class.

hwnd=CreateWindow("SDK Window",
"窗口程序",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);

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

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

LRESULT WINAPI WndProc(HWND hwnd, // Handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam)
{
switch(uMsg)
{
case WM_CHAR:
MessageBox(hwnd,"這是按點擊了鍵盤!","提示",MB_OK);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"點擊了鼠標左鍵!","提示",MB_OK);
break;
case WM_RBUTTONDOWN:
MessageBox(hwnd,"點擊了鼠標右鍵!","提示",MB_OK);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"是否要關閉該程式?","提示",MB_YESNO))
{
DestroyWindow(hwnd); //Destroy window.
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
...全文
157 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sssoft 2004-09-03
  • 打赏
  • 举报
回复
//你的程序里面没有WinMain函数,这是Win32必需的一个函数,是一个入口函数
//如果没有这个函数,你编译的击不是可执行文件也不是动态库
#include "stdafx.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.

return 0;
}


class myThread
{
public:
static LRESULT WINAPI WndProc(HWND hwnd, // Handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam); // second message parameter

int WINAPI WinMain(HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow);

static DWORD WINAPI ThreadProc(LPVOID lParam); //thread process function.

protected:
HWND hwnd;
HANDLE hThread;
WNDCLASS wndclass;
MSG msg;
};

int WINAPI myThread::WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
wndclass.style=CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc =myThread::WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hbrBackground=(HBRUSH) GetStockObject(LTGRAY_BRUSH);
wndclass.lpszClassName="SDK Window";
wndclass.lpszMenuName=NULL;

RegisterClass(&wndclass); // Register window class.

hwnd=CreateWindow("SDK Window",
"窗口程序",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);

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

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

LRESULT WINAPI myThread::WndProc(HWND hwnd, // Handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam)
{
switch(uMsg)
{
case WM_CHAR:
MessageBox(hwnd,"這是按點擊了鍵盤!","提示",MB_OK);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"點擊了鼠標左鍵!","提示",MB_OK);
break;
case WM_RBUTTONDOWN:
MessageBox(hwnd,"點擊了鼠標右鍵!","提示",MB_OK);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"是否要關閉該程式?","提示",MB_YESNO))
{
DestroyWindow(hwnd); //Destroy window.
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
modena 2004-09-03
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3310/3310705.xml?temp=.8573725
mynamelj 2004-09-03
  • 打赏
  • 举报
回复
刚才那个问题解决了可是现在又出现:
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
Debug/Thread.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
Creating browse info file...
sssoft 2004-09-03
  • 打赏
  • 举报
回复
窗口函数只能是静态的或者是全局的
sssoft 2004-09-03
  • 打赏
  • 举报
回复
这个函数在类里面定义成静态的
static LRESULT WINAPI WndProc(HWND hwnd......
mynamelj 2004-09-03
  • 打赏
  • 举报
回复
你们俩位说的我都试过,还是那处错误!
wangweixing2000 2004-09-03
  • 打赏
  • 举报
回复
他们两个的参数是否一致呢?
whiteclouds 2004-09-03
  • 打赏
  • 举报
回复
你把两个函数的实现代码换一下位置试试.
mynamelj 2004-09-03
  • 打赏
  • 举报
回复
我强行转换过没有用的.
microyzy 2004-09-03
  • 打赏
  • 举报
回复
你自己强行转一下:
wndclass.lpfnWndProc = (WNDPROC)myThread::WndProc;

还有声明:
static DWORD WINAPI ThreadProc(LPVOID lParam); //thread process function.


16,473

社区成员

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

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

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