怎么把通用对话框(CFileDialog)与ActiveX控件(不是Windows通用控件哦)贴到一起

LiangFomu 2000-04-27 10:34:00
各位高手请问,怎么把通用对话框(CFileDialog)与ActiveX控件(不是Windows通用控件)贴到一起.我要做一个类似PhotoShop打开文件时能够预览的通用对话框,在VC中通用控件只能加入BMP(位图)我用VB做个ActiveX控件用于装入图片.问题的CFileDialog只承认一般的控件,用ActiveX控件与之贴一起就不出现了.我又用属性框和属性页来做,CFileDialog不能贴到属性页!HELP ME!HELP...HELP...
...全文
202 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
superbat 2000-04-28
  • 打赏
  • 举报
回复
从CFileDialog类派生自己的类,然后选择加入工程组件,选择加入Activex控件,之后自己的项目中就多了该控件的三个类,然后在自己的CFileDialog派生类中加入该控件的成员变量,并在OnInitDialog事件中调用该控件成员变量的Create建立该控件即可。具体可参阅本站点Visual c++下的对话框处理中的custfile.zip文件。
longx 2000-04-28
  • 打赏
  • 举报
回复
其实这涉及到对话框的嵌套技术。以下给出一个定制的CFileDialog示例.

原理:Win32 提供一种方法,可以将一个对话框嵌入另一个对话框里,多个对话框
显示时就象一个无缝的整体。
1)创建一个对话框模板,
2)其中有一个“洞”(如一个分组框控件或静态文本控件),
并赋一个特殊的子窗口ID stc32(=0x045f)

例://本程序演示如何使用对话框的嵌套技术
//定制的CFileDialog
1)用对话框编辑器创建对话框资源。ID 为 IDD_FILESPECIAL 。
设置对话框的Style属性为Child,Border 属性为None,
选择Clip Siblings 和Visible.
加入一些控件,其中有一个洞(静态文本控件,ID 为 stc32=0x045f)

2)利用ClassWizard 来创建CSpecialFileDialog类

3)手工改变基类CDialog 为CFileDialog

4)改变构造函数
//声明
CSpecialFileDialog(BOOL bOpenFileDialog,LPCSTR lpszDefExt=NULL, LPCSTR lpszFileName=NULL,
DWORD dwFlags=OFN_HIDEREADONLY and
OFN_OVERWRITEPROMPT,
LPCSTR lpszFilter=NULL,CWnd* pParentWnd=NULL);

//定义
CSpecialFileDialog::CSpecialFileDialog(BOOL bOpenFileDialog,
LPCSTR lpszDefExt,LPCSTR lpszFileName,DWORD dwFlags,
LPCSTR lpszFilter,CWnd* pParentWnd)
:CFileDialog(bOpenFileDialog,lpszDefExt,lpszFileName,
dwFlags,lpszFilter,pParentWnd)
{
m_ofn.Flags and =OFN_ENABLETEMPLATE;
m_ofn.lpTemplateName=MAKEINTRESOURCE(IDD_FILESPECIAL);
m_ofn.lpstrTitle="Delete File";
}

5)如果需要的话,映射WM_INITDIALGO消息,进行必要的设置
//以下程序改变窗口的图标及按扭控件的标题
BOOL CSpecialFileDialog::OnInitDialog()
{
HICON hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
GetParent()->SetIcon(hIcon,TRUE);
GetParent()->SetIcon(hIcon,FALSE);
BOOL bRet=CFileDialog::OnInitDialog();
if(bRet==TRUE)
GetParent()->GetDlgItem(IDOK)->SetWindowText("Delete");
return bRet;
}

6)映射其他控件的消息处理函数


softdoctor 2000-04-28
  • 打赏
  • 举报
回复
你要直接创建该ActiveX控件窗口。
办法:
从CFileDialog 继承一类 名曰:CFileDialogEx

在构造函数里加入 SetTemplate( IDD_YOUDIALOG );

重载 OnInitDone 函数
在该函数里创建该控件,假设该控件已被你引入工程,名曰:CTheCtrl
在你的类里加入成员变量 CTheCtrl m_theCtrl;

m_theCtrl.Create(NULL,NULL,WS_CHILD and WS_VISIBLE,rc,this,ID_CTRL,0);

其中rc是该控件的位置,改动它,想放在那就能放在那。

然后,重载 OnFileNameChange函数
在那里就可以实现预览了。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧