CFileDialog的保存对话框,如何实现当用户没有输入保存的文件名字的时候,保存按钮是灰色的?用户输入后按钮才变有效 rt 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是一个思路:先:CWnd cw;HWND COK=保存按钮的句柄;cw.Attach(COK); cw.EnableWindow(FALSE);cw.Detach();再:设置一个TIMER,等到用户输入后再EnableWindow(TRUE); 一楼大大lixiaosan(小三)的方法不行啊,我看了msdn,提供重载的那几个方法都没有用看来要看看二楼的方法行不行了,:( 想了一下也不知道二楼的方法我要如何实现,关键是我不能获得CFileDialog对话框的用户输入事件,我需要在这个事件里Enable按钮,看来无法实现了?! 不难,获得hwnd,然后enum childwindow,最后在timer发送EnableWindow FALSE就行了,捕获edit不为空,killTimer,比较龌龊但可以阿 在派生类里设置TIMER也可以.几行代码就搞定了控件的ID:Open按钮: 1file name(Edit Combo): 1152 派生是无法实现楼主的需求的,subclass可以。 我这样实现了,专门搞了个线程不过如果是英文版的操作系统这个就不起作用了,:(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;} "派生是无法实现楼主的需求的,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); 刚好九行. 求助:非模态对话框 如何将树形控件全部变灰不能操作? 如何判断一个磁盘扇区是否损坏? 有关svchost.exe的问题 请问基于对话框的程序可以开发odbc的数据库程序吗? 请问怎么让FormView始终填满切分窗口0,0? arvid_gs(west)请进来。谢谢你!!!!^_^这是另外一贴。 如何同时得到多个文件路径-在线等待 不好意思,又一关于位图显示闪烁的问题,哪位高手给诊断诊断 现在网站是不是有点问题,我点管理怎么不能给他们加分 win2k DDK sp1, Win2ksvr,DriverStdio3.1上不能编译程序吗? 关于程序要发送错误报告的问题
CWnd cw;
HWND COK=保存按钮的句柄;
cw.Attach(COK);
cw.EnableWindow(FALSE);
cw.Detach();再:
设置一个TIMER,等到用户输入后再EnableWindow(TRUE);
看来要看看二楼的方法行不行了,:(
Open按钮: 1
file name(Edit Combo): 1152
不过如果是英文版的操作系统这个就不起作用了,:(
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;
}
为什么无法实现?派生类的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); 刚好九行.