如何在窗体上把文件目录做成向浏览器中的链接一样,一点击就直接打开目录 如何在窗体上把文件目录做成向浏览器中的链接一样,一点击就直接打开目录 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 很多网页中嵌入的脚本都可以打开磁盘目录,你可以找一个这样的html页面,使用CHtmlDialog(MFC7有,MFC6没有,但是可以在网上找到类似功能的代码)显示一个网页对话框使用浏览器的tree加list方式不好吗? bohut(伯虎): 你说的类叫什么名字啊。 VC实现超链接WINDOWS API函数ShellExecute,其原形为:HINSTANCE ShellExecute( HWND hwnd, //窗口句柄 LPCTSTR lpOperation, //操作类型 LPCTSTR lpFile, //文件指针 LPCTSTR lpParameters, //文件可带的参数 LPCTSTR lpDirectory, //缺省目录 INT nShowCmd //显示方式 );---- ShellExecute函数用于打开或执行一个文件,在调用此函数时只须指定要打开或执行的文件名,而不必管用什么程序去打开或执行文件,WINDOWS会自动根据要打开或执行的文件去判断该如何执行文件或用什么程序去打开文件。以下给出一个完整实例,具体实步骤: 比如:ShellExecute (hWnd, "open", "c:\\windows\\media\\Canyon.mid", NULL, NULL, SW_SHOWNORMAL);void CLinkDlg::OnButton1() {ShellExecute(m_hWnd, NULL, "http://www.dingming.com", NULL, NULL, SW_SHOWMAXIMIZED); // Visit our website}void CLinkDlg::OnButton2() {ShellExecute(m_hWnd, NULL, "mailto:[email protected]", NULL, NULL, SW_SHOWMAXIMIZED); // Email} VC++ 中巧妙实现超链接控制 我们用MFC开发应用程序时,通常在窗口中放置大量的控件,通过触发这些控件的事件来完成我们的控制。但并不是每个控件都提供所有的事件消息,例如我们在对话窗口中加入一个静态文本控件(CState类),这时在ClassWizard中此控件没有任何消息,也就无法完成所要求的控制。VC++中为我们提供了一个API函数GetWindowRect(),此函数可以获得窗口中所有控件的位置,这样我们就可以在窗口的消息中利用位置判断来实现事件控制。 基于以上原理,可以轻松的实现超链接控制和动态提示以及窗口区域事件捕获等功能。以超链接控制为例,通常我们在对话框中加入电子邮件或主页的超链接,超链接一般要求获得焦点后鼠标变形,并且能响应OnClick事件,下面简单介绍其实现原理。 1.首先创建基于对话框的Sample工程。 2.在Sample工程的资源文件中引入光标文件将其ID设为"IDC—HAND",在SAMPLE—DIALOG的对话框中加入静态文本控件将其ID设为"IDC—LINK",Caption设为"http://www.ciw.com.cn" 3.在对话类的头文件(SampleDlg.h)添加数据成员 protected: RECT m—pRectLink; //用于保存静态文本框的屏幕坐标 4.获取控件坐标 在对话类成员函数OnInitDialog()中添加以下代码(sampleDlg.cpp): GetDlgItem(IDC—LINK)-〉GetWindowRect(&m—pRectLink); //将静态文本的屏幕坐标存放在m—pRectLink中 ScreenToClient(&m—pRectLink); //将屏幕坐标转换为客户坐标 5.变换鼠标形状 利用ClassWizard为对话框添加OnMouseMove()消息,在函数OnMouseMove(UINT nFlags, CPoint point)中,point参数可获得对应于窗口左上角的鼠标坐标,通过判断算法就可实现事件的控制。 //下面设置鼠标在静态文本区时,将光标设成小手状 if (point.x〉m—pRectLink.left&&point.x〈m—pRectLink.right&&point.y〉m—pRectLink.top&&point.y〈m—pRectLink.bottom) //此处添加判断坐标算法 { HCURSOR hCursor; hCursor=AfxGetApp()-〉LoadCursor(IDC—HAND); //将鼠标设为小手状 SetCursor(hCursor); } //下面语句用来设置默认(箭头)鼠标形状,一般鼠标移开后窗口会自动恢复默认鼠标形状,可酌情添加 if (...)//此处酌情添加鼠标不在静态文本区的坐标算法,本例可不加 { hCURSOR hCursor; hCursor=AfxGetApp()-〉LoadStandardCursor(IDC—IBEAM); //将光标设为默认值(箭头) SetCursor(hCursor); } 6.添加鼠标单击事件 利用ClassWizard为对话框添加OnLButtonDown()消息,参数与OnMouseMove()一样。 if (point.x〉m—pRectLink.left&&point.x〈m—pRectLink.right&&point.y〉m—pRectLink.top&&point.y〈m—pRectLink.bottom) //此处添加判断坐标算法 { if (nFlags==MK—LBUTTON)//鼠标左键按下 { //为改善鼠标效果,此处加入以上变换鼠标形状的代码 ShellExecute(0, NULL, "http://www.ciw.com.cn", NULL,NULL, SW—NORMAL); //也可以添加电子邮件的链接 } } 在开发应用程序的过程中,灵活运用控件的位置可以实现一些特殊的消息控制。在以上例子中将静态文本稍加修饰,比如获得焦点时增加亮度或下画线效果会更好。 codeproject上有个CHyperlinkStatic完全可以满足你的要求。 学习MFC遇到的问题呀! vc6.0写的mfc程序,自卸载该怎么办,谢谢 递归函数过深 导致栈溢出崩溃? 怎么使用detour 才能HOOK到c++builder调用的函数 高分求 COM 原理与应用 的电子书 注意 不是附书源码 各位大侠下面一个程序是什么意思 ———请帮忙----! 如何查找字符 如何获取windows任务栏上网络图标的状态 问个小神秘问题,关于服务器端开发 oo4o中的日期类型数据怎么导入呀? GetDlgItem调用的是控件ID,是一个INT数值,我如何能用程序动态调用ID?
使用浏览器的tree加list方式不好吗?
你说的类叫什么名字啊。
HINSTANCE ShellExecute(
HWND hwnd, //窗口句柄
LPCTSTR lpOperation, //操作类型
LPCTSTR lpFile, //文件指针
LPCTSTR lpParameters, //文件可带的参数
LPCTSTR lpDirectory, //缺省目录
INT nShowCmd //显示方式
);
---- ShellExecute函数用于打开或执行一个文件,在调用此函数时只须指定要打开或执行的文件名,而不必管用什么程序去打开或执行文件,WINDOWS会自动根据要打开或执行的文件去判断该如何执行文件或用什么程序去打开文件。以下给出一个完整实例,具体实步骤:
比如:
ShellExecute (hWnd, "open", "c:\\windows\\media\\Canyon.mid", NULL, NULL, SW_SHOWNORMAL);
void CLinkDlg::OnButton1()
{
ShellExecute(m_hWnd, NULL, "http://www.dingming.com", NULL, NULL, SW_SHOWMAXIMIZED); // Visit our website
}void CLinkDlg::OnButton2()
{
ShellExecute(m_hWnd, NULL, "mailto:[email protected]", NULL, NULL, SW_SHOWMAXIMIZED); // Email
}
我们用MFC开发应用程序时,通常在窗口中放置大量的控件,通过触发这些控件的事件来完成我们的控制。但并不是每个控件都提供所有的事件消息,例如我们在对话窗口中加入一个静态文本控件(CState类),这时在ClassWizard中此控件没有任何消息,也就无法完成所要求的控制。VC++中为我们提供了一个API函数GetWindowRect(),此函数可以获得窗口中所有控件的位置,这样我们就可以在窗口的消息中利用位置判断来实现事件控制。 基于以上原理,可以轻松的实现超链接控制和动态提示以及窗口区域事件捕获等功能。以超链接控制为例,通常我们在对话框中加入电子邮件或主页的超链接,超链接一般要求获得焦点后鼠标变形,并且能响应OnClick事件,下面简单介绍其实现原理。 1.首先创建基于对话框的Sample工程。 2.在Sample工程的资源文件中引入光标文件将其ID设为"IDC—HAND",在SAMPLE—DIALOG的对话框中加入静态文本控件将其ID设为"IDC—LINK",Caption设为"http://www.ciw.com.cn" 3.在对话类的头文件(SampleDlg.h)添加数据成员 protected: RECT m—pRectLink; //用于保存静态文本框的屏幕坐标 4.获取控件坐标 在对话类成员函数OnInitDialog()中添加以下代码(sampleDlg.cpp): GetDlgItem(IDC—LINK)-〉GetWindowRect(&m—pRectLink); //将静态文本的屏幕坐标存放在m—pRectLink中 ScreenToClient(&m—pRectLink); //将屏幕坐标转换为客户坐标 5.变换鼠标形状 利用ClassWizard为对话框添加OnMouseMove()消息,在函数OnMouseMove(UINT nFlags, CPoint point)中,point参数可获得对应于窗口左上角的鼠标坐标,通过判断算法就可实现事件的控制。 //下面设置鼠标在静态文本区时,将光标设成小手状 if (point.x〉m—pRectLink.left&&point.x〈m—pRectLink.right&&point.y〉m—pRectLink.top&&point.y〈m—pRectLink.bottom) //此处添加判断坐标算法 { HCURSOR hCursor; hCursor=AfxGetApp()-〉LoadCursor(IDC—HAND); //将鼠标设为小手状 SetCursor(hCursor); } //下面语句用来设置默认(箭头)鼠标形状,一般鼠标移开后窗口会自动恢复默认鼠标形状,可酌情添加 if (...)//此处酌情添加鼠标不在静态文本区的坐标算法,本例可不加 { hCURSOR hCursor; hCursor=AfxGetApp()-〉LoadStandardCursor(IDC—IBEAM); //将光标设为默认值(箭头) SetCursor(hCursor); } 6.添加鼠标单击事件 利用ClassWizard为对话框添加OnLButtonDown()消息,参数与OnMouseMove()一样。 if (point.x〉m—pRectLink.left&&point.x〈m—pRectLink.right&&point.y〉m—pRectLink.top&&point.y〈m—pRectLink.bottom) //此处添加判断坐标算法 { if (nFlags==MK—LBUTTON)//鼠标左键按下 { //为改善鼠标效果,此处加入以上变换鼠标形状的代码 ShellExecute(0, NULL, "http://www.ciw.com.cn", NULL,NULL, SW—NORMAL); //也可以添加电子邮件的链接 } } 在开发应用程序的过程中,灵活运用控件的位置可以实现一些特殊的消息控制。在以上例子中将静态文本稍加修饰,比如获得焦点时增加亮度或下画线效果会更好。