请教:如何在文件对话框(通用)的toolbar上加按钮并能够响应事件
要做一个全局的,就是在系统中出现的文件对话框都改成自己的定制的
请大家提供一些思路
分不够再加

解决方案 »

  1.   


    定制文件对话框例子
    http://www.vckbase.com/document/viewdoc/?id=417系统中出现的文件对话框都改成自己的定制的这不太现实
    替换系统文件, APIHook, 用Hook自动子类化文件对话框, 方法很多, 都不怎么方便
      

  2.   

    在OnInitDialog() 中添加如下代码BOOL bRet=CFileDialog::OnInitDialog();
    if (bRet == TRUE) 
    {
    //*
    //CWnd *h1=GetParent()->GetDlgItem(IDOK);
    //h1->SetWindowText("Add");
    this->HideControl(IDOK);
    this->HideControl(0x470); //combo框
    this->HideControl(0x441); //文件类型
    this->HideControl(IDCANCEL); //取消按钮
              }
    然后建立自己的对话框类,继承自CFileDialog然后你就可以在自己的对话框上创建你需要功能
      

  3.   

    还是自己重载CFileDialog类吧!来得快!
      

  4.   


    我看了别人定制文件对话框的例子
    都只是在对话框上定制
    可以在对话框上的Toolbar上添加按钮吗另外用APIHOOK需要HOOK哪些API
      

  5.   

    用一个直接一点的方法:
    先获取ToolBar上某一项的显示的位置区域(RECT)
    然后创建一个Button,按钮的位置就设置在该Rect上!
    这样也能得到你想要的效果!
      

  6.   

    spy++上可以查看toolbar的classname是ToolbarWindow32
    你可以通过这个名称去获得toolbar的窗口句柄你就可以在这个Toolbar上添加按钮了
    重写一个CfileDlg
    在OnInitDialog中设一个进程类钩子
    HookHandle = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC) Hooker,(HINSTANCE)NULL, (DWORD)GetCurrentThreadId());
    在钩子函数中判断Toolbar句柄
    CWPSTRUCT* x = (CWPSTRUCT*)lParam;
    GetClassName(x -> hwnd, szClassName, MAX_CHAR);
    if(strcmp(_strlwr(szClassName), "toolbarwindow32") == 0)
    {
    hWndToolbar = x -> hwnd;//这个就是toolbar的句柄
    }
    然后添加一个按钮
    TBBUTTON Button;//自己设置这个button属性
    ::SendMessage(hWndToolbar, TB_INSERTBUTTON, 0, (LPARAM)&Button);你可以试试这个方法至于hook系统filedialog,需要全局钩子
    不过我也没想到什么好方法
    关注一下