社区
C++ Builder
帖子详情
小难题!!!!!
COKING
2003-01-12 12:05:17
怎么在SaveDialog没选定文件的时候,按《确定》键把它关掉?
...全文
44
16
打赏
收藏
小难题!!!!!
怎么在SaveDialog没选定文件的时候,按《确定》键把它关掉?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
COKING
2003-01-13
打赏
举报
回复
ok!!!!谢了!!!!@_@
「已注销」
2003-01-12
打赏
举报
回复
您预先写一个默认的filename 如“未命名”(当然 您得取一个再蹊跷点的 如 @未命名)
这样就可以支持“确定”了
你发现还是“未命名”
那么你就可以判断用户没有选中了
Friecin
2003-01-12
打赏
举报
回复
SaveDialog是封装WinAPI标准对话框的,如果你想这么做,就需要直接调用API函数,来进行调整:
int DialogBoxParam(HINSTANCE hinstance,LPCTSTR lpTemplateName,HWND hWndParent,DLGPROC lp DialogFunc,LPARAM dwInitParam);
具体我没有试验过。
还有,说说你的意图,也许可以用其他方式解决实际问题。
s98231106
2003-01-12
打赏
举报
回复
不知道
jishiping
2003-01-12
打赏
举报
回复
不知道楼主为什么要这样做?是不是想让用户选择一个目录啊?如果这样的话,可以使用
BCB的函数SelectDirectory就可以了。
bool __fastcall SelectDirectory(const AnsiString Caption, const WideString Root,
AnsiString &Directory);
jishiping
2003-01-12
打赏
举报
回复
用API写可以,但是用BCB的控件就不行了。
warton
2003-01-12
打赏
举报
回复
如果filename不为空,就可以了
l_clove
2003-01-12
打赏
举报
回复
SaveDialog在没选定的时候,filename不是""么,判断一下就可以了吧
jishiping
2003-01-12
打赏
举报
回复
这个方法,对于SaveDialog一样使用,因为"保存"和“打开”按钮的ID是一样的,都是IDOK,也就是1。
jishiping
2003-01-12
打赏
举报
回复
我开始也是这么写的,可是不行啊,后来就改用钩子了。Windows可能做了什么手脚吧,至于是什么手脚,我就没有去研究了(估计是钩子方面的)。另外我举个例子,MessageBox这个函数,大家都不陌生。可是你用FindWindowEx,却怎么也找不到MessageBox这个窗口。用钩子才可以找到这个窗口句柄。
COKING
2003-01-12
打赏
举报
回复
再问一下,JSP大哥,下面的代码为什么不可以呀!!!你的代码SaveDialog可以吗?
FARPROC OldProc;
LRESULT CALLBACK MyProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM Param)
{
if(uMsg==WM_COMMAND&&wParam==ID_OK)
return MessageBox(0,"aaaa","bbbb",MB_OK);
else
return CallWindowProc(OldProc,hwnd,uMsg,wParam,Param);
}
//----------------------------------------------------------------
void __fastcall TForm1::SaveDialog1Show(TObject *Sender)
{
(long)OldProc=SetWindowLong(SaveDialog1->Handle,GWL_WNDPROC,(long)MyProc);
}
halibut
2003-01-12
打赏
举报
回复
要只是想选取目录,用SelectDirectory()函数就行啊!
jishiping
2003-01-12
打赏
举报
回复
在执行完OpenDialog1->Execute()后,用ExtractFileDir(OpenDialog1->FileName)就得到选择的目录了。
jishiping
2003-01-12
打赏
举报
回复
下面的代码就可以了,但是需要注意,OpenDialog1的属性ofFileMustExist
必须为false才可以。
static HWND hOkWnd = NULL;
static HHOOK hHook = NULL;
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0)
return CallNextHookEx(hHook, nCode, wParam, lParam);
MOUSEHOOKSTRUCT* pmhs = (MOUSEHOOKSTRUCT*)lParam;
if (wParam==WM_LBUTTONUP && pmhs->hwnd==hOkWnd) {
SendMessage(GetParent(hOkWnd), CDM_SETCONTROLTEXT,
edt1, (long)"(None)");
}
return 0;
}
//OpenDialog1的OnShow事件
void __fastcall TForm1::OpenDialog1Show(TObject *Sender)
{
hOkWnd = GetDlgItem(GetParent(OpenDialog1->Handle), IDOK);
hHook = SetWindowsHookEx(WH_MOUSE, (FARPROC)MouseProc,
NULL, GetCurrentThreadId());
}
//OpenDialog1的OnClose事件
void __fastcall TForm1::OpenDialog1Close(TObject *Sender)
{
if (hHook!=NULL) UnhookWindowsHookEx(hHook);
}
大大怪老张
2003-01-12
打赏
举报
回复
用jsp提供的函数来选择目录就好了。
COKING
2003-01-12
打赏
举报
回复
我确实要选目录的!
我用SetWindowLong 替换了对话框的WND_PROC后。来处理WM_COMMAND消息,
居然在点<确定>时,WM_COMMAND它是不触发的,而其他消息都能抓到的。
《确定》的ID 为ID_OK,
《取消》的ID 为ID_CANCEL,
这些我知道的。在点《确定》时处理。我要处理的。。。
监控别人电脑从此不再是
难题
!!请勿乱用
监控别人电脑从此不再是
难题
!!请勿乱用推荐一款很好用的网络监控软件!网络幽狗! 它界面清晰明了,操作十分简易,功能强大实用!中小企业的首选网络监控器,最接近大众的网络监控器!网页、QQ、MSN、FTP,收发...
毕设论文超级好用的降重方法,完美解决重复度高的
难题
!!
毕设论文超级好用的降重方法,完美解决重复度高的
难题
!!
王炸组合!CodeBuddy + 高德MCP 2.0 ,快速解决考点附近订酒店
难题
!
本文介绍了如何利用CodeBuddy和高德MCP 2.0快速解决考点附近订酒店的
难题
。作者通过CodeBuddy的智能编程功能,结合高德MCP 2.0的地图生成和导航功能,成功为对象筛选出符合要求的酒店,并生成了交互式地图和路线规划...
学生用计算机app,学生党利器!微软出品的这个小众APP,帮你搞定数学
难题
!
微软出品的这个小众APP,帮你搞定数学
难题
!你的计算器能解数学题吗?相信很多人用的都是手机自带的计算器,但是手机自带的计算器,也就只能算个加减乘除: 所以,今天给大家推荐一个集计算器和数学解析于一体的APP-...
不求人!轻松解决米3“内存不足”“无法安装软件”等
难题
!
轻松解决米3“内存不足”“无法安装软件”等
难题
! 精华发表在 玩机教程 01-25 14:54:58 来自PC复制链接手机看帖19065823 本人入手米3移动16G版两年四个月,使用至今,并没有出过硬件问题,从未进过售后...
C++ Builder
13,871
社区成员
102,693
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章