win32 控件之 sysLink控件(超链接)

闲来无聊,看了下MSDN,原来syslink控件是这样实现的:

步骤:

1.拖放syslink控件至对话框

2.修改caption为你想要的任何链接名(如:百度一下)

3.在WM_NOTIFY消息里进行如下处理

代码:

case WM_NOTIFY:
  switch (((LPNMHDR)lParam)->code)
  {
  case NM_CLICK:
  case NM_RETURN:
   {
    HWND g_hLink=GetDlgItem(hDlg,IDC_SYSLINK1);
    PNMLINK pNMLink = (PNMLINK)lParam;
    LITEM item = pNMLink->item;
    if ((((LPNMHDR)lParam)->hwndFrom == g_hLink) && (item.iLink == 0))
    {
     ShellExecute(NULL, L"open",L"
http://www.baidu.com", NULL, NULL, SW_SHOW);
    }
    else if (wcscmp(item.szID, L"idInfo") == 0)
    {
     MessageBox(hDlg, L"This isn't much help.", L"Example", MB_OK);
    }
    break;
   }
  
  }
  break;

 

 手动创建syslink(msdn):

HWND CreateSysLink(HWND hDlg, HINSTANCE hInst, RECT rect)
{
    return CreateWindowEx(0, WC_LINK, 
        L"For more information, <A HREF=\"http://www.microsoft.com\">click here</A> " \
        L"or <A ID=\"idInfo\">here</A>.", 
        WS_VISIBLE | WS_CHILD | WS_TABSTOP, 
        rect.left, rect.top, rect.right, rect.bottom, 
        hDlg, NULL, hInst, NULL);
}

 

然后响应用户点击:

 

case WM_NOTIFY:

    switch (((LPNMHDR)lParam)->code)
    {
    
    case NM_CLICK:          // Fall through to the next case.
    
    case NM_RETURN:
        {
            PNMLINK pNMLink = (PNMLINK)lParam;
            LITEM   item    = pNMLink->item;
            
            if ((((LPNMHDR)lParam)->hwndFrom == g_hLink) && (item.iLink == 0))
              {
                ShellExecute(NULL, L"open", item.szUrl, NULL, NULL, SW_SHOW);
              }
            
            else if (wcscmp(item.szID, L"idInfo") == 0)
              {
                MessageBox(hDlg, L"This isn't much help.", L"Example", MB_OK);
              }
            
            break;
        }
    }
    
    break;

 

 

PS:我在利用syslink进行运行时能够正常弹出对话框,因为我将对话框设置成主窗口,后来我发现,当syslink控件不是在这个主窗口上时,对话框无法弹出,看了MSDN,解释说syslink控件只支持Unicode,不知道是什么意思,如果有哪位高手路过,还请麻烦您能够花费您几分钟时间留言解决一下,不甚感激!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值