rt

解决方案 »

  1.   

    这是一个思路:先:
    CWnd cw;
    HWND COK=保存按钮的句柄;
    cw.Attach(COK);
    cw.EnableWindow(FALSE);
    cw.Detach();再:
    设置一个TIMER,等到用户输入后再EnableWindow(TRUE);
      

  2.   

    一楼大大lixiaosan(小三)的方法不行啊,我看了msdn,提供重载的那几个方法都没有用
    看来要看看二楼的方法行不行了,:(
      

  3.   

    想了一下也不知道二楼的方法我要如何实现,关键是我不能获得CFileDialog对话框的用户输入事件,我需要在这个事件里Enable按钮,看来无法实现了?!
      

  4.   

    不难,获得hwnd,然后enum childwindow,最后在timer发送EnableWindow FALSE就行了,捕获edit不为空,killTimer,比较龌龊但可以阿
      

  5.   

    在派生类里设置TIMER也可以.几行代码就搞定了控件的ID:
    Open按钮: 1
    file name(Edit Combo):  1152   
      

  6.   

    派生是无法实现楼主的需求的,subclass可以。
      

  7.   

    我这样实现了,专门搞了个线程
    不过如果是英文版的操作系统这个就不起作用了,:(
    ULONG _stdcall BtnEnableThd(void *param)
    {
    CFileDialogEx *dlg = (CFileDialogEx*)param;

    while(!dlg->m_bQuitThd){
    HWND hwnd = dlg->FindWindow("#32770", NULL)->GetSafeHwnd();

    if(hwnd){
    HWND button = NULL;
    if(dlg->m_bOpenFileDialog)
    button = FindWindowEx(hwnd, NULL, "Button", "打开(&O)");
    else
    button = FindWindowEx(hwnd, NULL, "Button", "保存(&S)"); HWND edit = FindWindowEx(hwnd, NULL, "Edit", NULL);
    if(button && edit){
    char text[200];
    GetWindowText(edit, text, 200);
    if(strlen(text) != 0){
    ::EnableWindow(button, TRUE);
    }
    else{
    int ret = ::EnableWindow(button, FALSE);
    int err = GetLastError();
    }
    }
    } Sleep(100);
    } return 0;
    }
      

  8.   

    "派生是无法实现楼主的需求的,subclass可以" 
    为什么无法实现?派生类的OnInitDialog()里添加代码:
    SetTimer(1,100,NULL);
    GetParent()->GetDlgItem(1)->EnableWindow(FALSE);OnTimer(UINT nIDEvent)里添加代码:
    CString ss;
    GetParent()->GetDlgItemText(1152,ss);
    if(ss=="")
        GetParent()->GetDlgItem(1)->EnableWindow(FALSE);
    else
        GetParent()->GetDlgItem(1)->EnableWindow(TRUE);OnDestroy()里添加代码:
    KillTimer(1); 刚好九行.