怎样向OUTLOOK EXPRESS 工具栏添加按钮?? 怎样向OUTLOOK EXPRESS 工具栏添加按钮?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 需要写一个shell钩子,找到OE的工具栏的窗口句柄,然后创建一个rebar或者添加button 需要自己去处理该按钮的WM_COMMAND消息 我觉得可能是这样:我的回调函数为这个按钮处理了消息,而OE却不知道。所以OE认为没有为这个按钮添加消息映射,所以是变灰的 LRESULT CALLBACK newOEWindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){ LRESULT lRet = 0L; switch(uMsg) { case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_SAMPLE: MessageBox(hWnd,TEXT("sample "),NULL,MB_OK | MB_ICONINFORMATION); break; default: break; } break; case WM_CLOSE: destroyToolbar(); lRet = CallWindowProc(lpfnOldOEWindowProc,hWnd,uMsg,wParam,lParam); SetWindowLong(hWnd,GWL_WNDPROC,(LONG)lpfnOldOEWindowProc); lpfnOldOEWindowProc = NULL; return lRet; default:break; } return CallWindowProc(lpfnOldOEWindowProc,hWnd,uMsg,wParam,lParam);} 你的钩子代码写错了应该是这么写://建立WH_CALLWNDPROC的钩子的目的在于响应消息映射,这个消息钩子主要是监控windows当前的消息循环LRESULT CALLBACK CallWndProc(int code, WPARAM wParam, LPARAM lParam){ //加上AFX_MANAGE_STATE(AfxGetStaticModuleState());的目的在于扩展DLL下可以调用MFC AFX_MANAGE_STATE(AfxGetStaticModuleState()); CSpyOEApp *pApp =(CSpyOEApp*)AfxGetApp(); try { if (code >= 0 ) { //PCWPSTRUCT结构可以参看MSDN,主要是CallWndProc钩子中的一个结构 PCWPSTRUCT pwp= (PCWPSTRUCT)lParam; if(pwp) { if(pwp->message == WM_COMMAND && pwp->hwnd == g_hmainOE) { if(ID_UPDATE == LOWORD(pwp->wParam)) { 如何一行代码同时定义枚举类型和相应的字符串? CAsyncSocket的应用问题,请各位帮帮忙! 求助,图像不能显示 请教INI循环读写的问题 再对话框中加入RICH tEXT控件后 高分求个系统 菜鸟求救啊! 关于类的一个小问题 给数据库中的表在MFC中新建一个类,基类是什么呀? SetPathName() 看过潘爱民<<COM原理和应用>>的进来,没看过OR不懂COM的就不要进来了 怎样在Dialog之间传值?
我的回调函数为这个按钮处理了消息,而OE却不知道。所以OE认为没有为这个按钮添加消息映射,所以是变灰的
{
LRESULT lRet = 0L; switch(uMsg)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_SAMPLE:
MessageBox(hWnd,TEXT("sample "),NULL,MB_OK | MB_ICONINFORMATION);
break; default:
break;
}
break; case WM_CLOSE:
destroyToolbar();
lRet = CallWindowProc(lpfnOldOEWindowProc,hWnd,uMsg,wParam,lParam); SetWindowLong(hWnd,GWL_WNDPROC,(LONG)lpfnOldOEWindowProc);
lpfnOldOEWindowProc = NULL;
return lRet; default:break;
} return CallWindowProc(lpfnOldOEWindowProc,hWnd,uMsg,wParam,lParam);
}
应该是这么写:
//建立WH_CALLWNDPROC的钩子的目的在于响应消息映射,这个消息钩子主要是监控windows当前的消息循环
LRESULT CALLBACK CallWndProc(int code, WPARAM wParam, LPARAM lParam)
{
//加上AFX_MANAGE_STATE(AfxGetStaticModuleState());的目的在于扩展DLL下可以调用MFC
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CSpyOEApp *pApp =(CSpyOEApp*)AfxGetApp();
try
{
if (code >= 0 )
{
//PCWPSTRUCT结构可以参看MSDN,主要是CallWndProc钩子中的一个结构
PCWPSTRUCT pwp= (PCWPSTRUCT)lParam;
if(pwp)
{
if(pwp->message == WM_COMMAND && pwp->hwnd == g_hmainOE)
{
if(ID_UPDATE == LOWORD(pwp->wParam))
{