怎样向OUTLOOK EXPRESS 工具栏添加按钮??

解决方案 »

  1.   

    需要写一个shell钩子,找到OE的工具栏的窗口句柄,然后创建一个rebar或者添加button
      

  2.   

    需要自己去处理该按钮的WM_COMMAND消息
      

  3.   

    我觉得可能是这样:
    我的回调函数为这个按钮处理了消息,而OE却不知道。所以OE认为没有为这个按钮添加消息映射,所以是变灰的
      

  4.   

    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);
    }
      

  5.   

    你的钩子代码写错了
    应该是这么写:
    //建立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))
    {