如何在窗体上把文件目录做成向浏览器中的链接一样,一点击就直接打开目录

JulianCSDN 2005-05-25 10:11:16
如何在窗体上把文件目录做成向浏览器中的链接一样,一点击就直接打开目录
...全文
237 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenkui 2005-05-25
  • 打赏
  • 举报
回复
codeproject上有个CHyperlinkStatic完全可以满足你的要求。
QunKangLi 2005-05-25
  • 打赏
  • 举报
回复
子类化控件,处理点击消息。
laogong165 2005-05-25
  • 打赏
  • 举报
回复
自绘。响应鼠标动作。
bohut 2005-05-25
  • 打赏
  • 举报
回复
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);

   //也可以添加电子邮件的链接

   } }

  在开发应用程序的过程中,灵活运用控件的位置可以实现一些特殊的消息控制。在以上例子中将静态文本稍加修饰,比如获得焦点时增加亮度或下画线效果会更好。

bohut 2005-05-25
  • 打赏
  • 举报
回复
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:arus@usa.com", NULL, NULL, SW_SHOWMAXIMIZED); // Email
}

JulianCSDN 2005-05-25
  • 打赏
  • 举报
回复
bohut(伯虎):
你说的类叫什么名字啊。
JulianCSDN 2005-05-25
  • 打赏
  • 举报
回复
我不想嵌入网页的那种,我想直接把路径文字写在窗体上,然后鼠标放上去成蓝色显示,然后点击打开目录。
bohut 2005-05-25
  • 打赏
  • 举报
回复
用超链接来做,有专门写好的类,搜索一下。
  • 打赏
  • 举报
回复
很多网页中嵌入的脚本都可以打开磁盘目录,你可以找一个这样的html页面,使用CHtmlDialog(MFC7有,MFC6没有,但是可以在网上找到类似功能的代码)显示一个网页对话框


使用浏览器的tree加list方式不好吗?
JulianCSDN 2005-05-25
  • 打赏
  • 举报
回复
怎么没人顶啊

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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