不得不再次提问!这样到底能不能实现!

szjlq 2000-12-14 12:52:00
我想在其它的开发工具中实现自画菜单(如:PB),我的想法是用C做一个DLL,再调用
DLL该窗口的消息处理过程转到DLL中来做,也不知道这样做法能不能实现,下面是我
写的源码,请各大侠帮我看看到底哪里写错啦!
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#pragma argsused
WNDPROC m_lPrevProc;//此处定义成FARPROC则没问题,但其它程序调用不了该DLL
extern "C" __declspec(dllexport) void __stdcall SetMenuitem(HWND hWND,
HMENU hMenu);
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*
lpReserved)
{
return 1;
}
//--------------------------------------------------------------------
void MyWinProc(HWND hWND,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch (uMsg)
{
case WM_DRAWITEM :
ShowMessage("WM_DRAWITEM");
break;
case WM_MEASUREITEM :
ShowMessage("WM_MEASUREITEM");
break;
default :
CallWindowProc(m_lPrevProc,hWND,uMsg,wParam,lParam);
程序在此处报错,我是菜鸟一个,望大虾多多指点:
[C++ Error] setmenumain.cpp(26): E2034 Cannot convert 'long' to 'int (
__stdcall *)()'
[C++ Error] setmenumain.cpp(26): E2342 Type mismatch in parameter 'lpP
revWndFunc' (wanted 'int (__stdcall *)()', got 'long')
}
//--------------------------------------------------------------------
void __stdcall SetMenuitem(HWND hWND,HMENU hMenu)
{
m_lPrevProc=(WNDPROC)GetWindowLong(hWND,GWL_WNDPROC);
SetWindowLong(hWND,GWL_WNDPROC,(DWORD)MyWinProc);
}



...全文
105 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
NowCan 2000-12-16
  • 打赏
  • 举报
回复
200分送我,OK?
呵呵....
yiwei 2000-12-14
  • 打赏
  • 举报
回复
???????
szjlq 2000-12-14
  • 打赏
  • 举报
回复
我已经解决啦!首先将m_lPrevProc定义成FARPROC,
然后将MyWinProc函数定义成CALLBACK(回调)就行啦!
下次我一定好好学习C++!,不过这里的人也太保守啦!
浪费了我200分,唉.

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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