不得不再次提问!这样到底能不能实现!
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);
}