VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1281|回复: 5

[已解决][15]通用对话框讲解,没有解决问题绝不罢休!,能实现扩展编辑框但获取不到内容!

[复制链接]
63_avatar_middle
最佳答案
1 
donate_vip 发表于 2020-2-8 20:10:17 | 显示全部楼层 |阅读模式


根据老师的提示所说,要用  IFileDialogCustomize 这个函数扩展控件
经过一番研究,是能实现了在文件框上扩展编辑框控件的功能
[15]通用对话框讲解,没有解决问题绝不罢休!,能实现扩展编辑框但获取不到内容!


但还是有两个缺陷
1、这个编辑框无法增加长度
2、无法获取到这个编辑框内容

获取的方式也很特别 是 ** 的变量,意思是 指针的指针
那要取得这个 变量的 也就用 ** 去获取就应该没问题的
结果提示出错(如下图)
[15]通用对话框讲解,没有解决问题绝不罢休!,能实现扩展编辑框但获取不到内容!
希望老师看在学生对问题,锲而不舍的研究的精神下,抽空给予解答,完善这份代码,不胜感激。


代码附件:
[15]通用对话框讲解,没有解决问题绝不罢休!,能实现扩展编辑框但获取不到内容! ExFileDlg.zip (134.1 KB, 下载次数: 13)




上一篇:完成端口 客户退出的疑问?
下一篇:GetQueuedCompletionStatus 没有响应?
51_avatar_middle
最佳答案
90 
online_admins 发表于 2020-2-8 21:06:22 | 显示全部楼层    本楼为最佳答案   
bestAnswer
参考这个帖子:
https://stackoverflow.com/questi ... -in-ifilesavedialog

所以,正确的应该是在 FileDialogEvent.cpp 中的 CFileDialogEvent::OnFileOk 方法中添加获取自定义编辑框的内容,代码如下:
  1. HRESULT CFileDialogEvent::OnFileOk(IFileDialog *pfd)
  2. {
  3.         IFileDialogCustomize *fileCustomize = NULL;
  4.         pfd->QueryInterface(IID_PPV_ARGS(&fileCustomize));

  5.         DWORD dwCtrlID = 1; //编辑框的控件ID
  6.         WCHAR *pTextBuf = NULL;
  7.         fileCustomize->GetEditBoxText(dwCtrlID, &pTextBuf);
  8.         MessageBox(0, pTextBuf, 0, 0);
  9.         CoTaskMemFree(pTextBuf);

  10.         fileCustomize->Release();
  11.         return S_OK;
  12. }
复制代码


我刚测试是好用的!
具体如何通过这个接口将编辑框的内容通知到 主对话框类 CExFileDlgDlg 中,楼主自己应该知道怎么做了!
63_avatar_middle
最佳答案
1 
ico_lz  楼主| 发表于 2020-2-8 22:19:19 | 显示全部楼层
###是的终于搞定了,基本实现了课程里面,扩展编辑框,带参数打开指定文本文件的要求
###再次感谢老师的辛勤指导!!!
代码如下:
  1. HRESULT CFileDialogEvent::OnFileOk(IFileDialog *pfd)
  2. {

  3.         IFileDialogCustomize *fileCustomize = NULL;
  4.         pfd->QueryInterface(IID_PPV_ARGS(&fileCustomize));
  5.        

  6.         DWORD dwCtrlID = 1; //编辑框的控件ID
  7.         WCHAR *pTextBuf = NULL;
  8.         fileCustomize->GetEditBoxText(dwCtrlID, &pTextBuf);
  9.         WCHAR * pFilePath = NULL;
  10.         pfd->GetFileName(&pFilePath);
  11.         ShellExecute(NULL, _T("open"), pFilePath, pTextBuf, NULL, SW_SHOW);
  12.         //MessageBox(0, pTextBuf, 0, 0);

  13.         CoTaskMemFree(pTextBuf);
  14.         fileCustomize->Release();

  15.         return S_OK;
  16. }
复制代码
63_avatar_middle
最佳答案
1 
ico_lz  楼主| 发表于 2020-2-8 22:22:58 | 显示全部楼层
Syc 发表于 2020-2-8 21:06
参考这个帖子:
https://stackoverflow.com/questions/35309166/using-geteditboxtext-in-ifilesavedialog ...

###是的终于实现课程中讲的,扩展编辑框控件,并带参数打开指定文本文件的功能
###再次感谢老师的辛勤指导,今天可是元宵节哦!!
###不过这样的元宵节也是有意义的,解决了一个问题,让自己更进步一点也是值得的
###更何况,在这次疫情中,无法去上班了
闲话不多说,奉上代码
  1. HRESULT CFileDialogEvent::OnFileOk(IFileDialog *pfd)
  2. {

  3.         IFileDialogCustomize *fileCustomize = NULL;
  4.         pfd->QueryInterface(IID_PPV_ARGS(&fileCustomize));
  5.        

  6.         DWORD dwCtrlID = 1; //编辑框的控件ID
  7.         WCHAR *pTextBuf = NULL;
  8.         fileCustomize->GetEditBoxText(dwCtrlID, &pTextBuf);
  9.         WCHAR * pFilePath = NULL;
  10.         pfd->GetFileName(&pFilePath);
  11.         ShellExecute(NULL, _T("open"), pFilePath, pTextBuf, NULL, SW_SHOW);
  12.         //MessageBox(0, pTextBuf, 0, 0);

  13.         CoTaskMemFree(pTextBuf);
  14.         fileCustomize->Release();

  15.         return S_OK;
  16. }
复制代码


43_avatar_middle
最佳答案
0 
在线会员 发表于 2021-1-12 13:53:11 | 显示全部楼层
还有接口的东西,看不懂,先放这吧
18_avatar_middle
最佳答案
0 
donate_vip 发表于 2021-4-29 15:53:20 | 显示全部楼层
Syc 发表于 2020-2-8 21:06
参考这个帖子:
https://stackoverflow.com/questions/35309166/using-geteditboxtext-in-ifilesavedialog ...

使用IFileDialog接口实现了基础的打开、另存为功能。向打开的对话框添加按钮、编辑框时,需要重写IFileDialogEvents接口,但是CFileDialogEvent这个类不知道是怎么添加的,CLR->COM组件添加类后也不是。网上查了一下好像是COM接口的实现,论坛上有这方面的教程吗,想学习一下~~
感谢感谢
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-9-28 12:23

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表