ShellExecute用法 以及静态文本超链接

本文介绍如何利用ShellExecute函数实现多种操作,包括打开文件、文件夹、网址及发送邮件等。此外还展示了如何通过代码实现鼠标悬停时改变光标样式以及鼠标点击时触发相应操作的方法。

打开一个文件 :ShellExecute(NULL, NULL, "c://mfc类库详解.chm", NULL, NULL, SW_SHOWNORMAL);

打开一个文件夹: ShellExecute(NULL, NULL, "c://", NULL, NULL, SW_SHOWNORMAL);

在资源管理器中打开:ShellExecute(NULL, "explore", "c://", NULL, NULL, SW_SHOWNORMAL);

搜索一个文件夹 : ShellExecute(NULL, "find", "c://", NULL, NULL, SW_SHOWNORMAL);

点击发邮件 : ShellExecute(0, NULL, "mailto:koma0769@vip.qq.com", NULL,NULL, SW_NORMAL);

QQ某人: ShellExecute(NULL,"open","tencent://Message/?Uin=345022596" ,NULL,NULL,NULL);

打开一个网址 :

WinExec("C://Program Files//Internet Explorer//IEXPLORE.exe http://www.baidu.com/", SW_SHOW);

ShellExecute(0, "open", "http://www.baidu.com", NULL,NULL, SW_NORMAL);

winexec 针对 可执行文件
shellexecute 针对 windows中的所有文件 他会找到windows登记了的对应程序打开对应文件

1、添加成员变量m_RectLink,用来保存文本框的坐标,添加两个静态文本控件,将默认ID改掉

  1. class CSampleDlg : public CDialog
  2. {
  3. // Construction
  4. public:
  5. CSampleDlg(CWnd* pParent = NULL);// standard constructor
  6. // Implementation
  7. protected:
  8. HICON m_hIcon;
  9. //用于保存静态文本框的屏幕坐标
  10. RECT m_pRectLink;
  11. ......
  12. }
  13. BOOL CSampleDlg::OnInitDialog()
  14. {
  15. CDialog::OnInitDialog();
  16. // Add "About..." menu item to system menu.
  17. // IDM_ABOUTBOX must be in the system command range.
  18. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  19. ASSERT(IDM_ABOUTBOX < 0xF000);
  20. CMenu* pSysMenu = GetSystemMenu(FALSE);
  21. if (pSysMenu != NULL)
  22. {
  23. CString strAboutMenu;
  24. strAboutMenu.LoadString(IDS_ABOUTBOX);
  25. if (!strAboutMenu.IsEmpty())
  26. {
  27. pSysMenu->AppendMenu(MF_SEPARATOR);
  28. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  29. }
  30. }
  31. // TODO: Add extra initialization here
  32. //将静态文本的屏幕坐标存放在m_pRectLink中
  33. GetDlgItem(IDC_LINK) -> GetWindowRect(&m_pRectLink);
  34. //将屏幕坐标转换为客户坐标
  35. ScreenToClient(&m_pRectLink);
  36. return TRUE;// return TRUE unless you set the focus to a control
  37. }

3、添加Windows消息WM_MOUSEMOVE和消息处理函数,代码如下:

  1. void CSampleDlg::OnMouseMove(UINT nFlags, CPoint point)
  2. {
  3. // TODO: Add your message handler code here and/or call default
  4. //下面设置鼠标在静态文本区时,将光标设成小手状
  5. if (point.x > m_pRectLink.left && point.x < m_pRectLink.right && point.y > m_pRectLink.top && point.y < m_pRectLink.bottom )
  6. //此处添加判断坐标算法
  7. {
  8. HCURSOR hCursor;
  9. hCursor = AfxGetApp() -> LoadCursor(IDC_HAND);
  10. //将鼠标设为小手状 并没有成功 原因待解
  11. SetCursor(hCursor);
  12. }
  13. CDialog::OnMouseMove(nFlags, point);
  14. }

4、添加Windows消息WM_LBUTTONDOWN 和消息处理函数,代码如下:

  1. void CSampleDlg::OnLButtonDown(UINT nFlags, CPoint point)
  2. {
  3. // TODO: Add your message handler code here and/or call default
  4. //此处添加判断坐标算法
  5. if (point.x > m_pRectLink.left && point.x < m_pRectLink.right && point.y > m_pRectLink.top && point.y < m_pRectLink.bottom)
  6. {
  7. //鼠标左键按下
  8. if (nFlags == MK_LBUTTON)
  9. {
  10. //为改善鼠标效果,此处加入以上变换鼠标形状的代码
  11. ShellExecute(0, NULL, "http://hi.baidu.com/wangguang246", NULL,NULL, SW_NORMAL);
  12. //也可以添加电子邮件的链接
  13. ShellExecute(0, NULL, "mailto:koma0769@vip.qq.com", NULL,NULL, SW_NORMAL);
  14. }
  15. }
  16. CDialog::OnLButtonDown(nFlags, point);
  17. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值