⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vcc27.htm

📁 SHELL排序算法与应用
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<html>
<head>
<title>c++系列</title>
 
 
 
 
 
 
 
<meta content="text/html; charset=gb2312" http-equiv=Content-Type>
 
 
</head>
<p align="center"><script src="../../1.js"></script></a>

<body bgcolor="#ffffff" leftmargin="5" topmargin="1" marginheight="5" marginwidth="5">
<div align=center> 
  <table border=0 cellpadding=0 cellspacing=0 width=680 align="center">
    <tbody> 
    <tr> 
      <td width=200 height="59"> 
         
    </tr>
    </tbody> 
  </table>
  <table border=1 bordercolordark=#ffffff bordercolorlight=#ffffff cellpadding=0 
cellspacing=0 width=685 align="center" height="70">
    <tbody> 
    <tr> 
      <td bgcolor=#F9D23C height=14> 
        <div align=center class=H1> <b><strong> 从任务通知区启动屏幕保护程序</span></strong></b></font></div>
      </td>
    </tr>
    <tr valign=top> 
      <td class=H1 height=212> 
        <p align="right"><font color="#FF0000"><strong> </span></strong>  &nbsp;&nbsp;&nbsp; 
          作者:朱志强</span></font></font></p>
        <p>  本文通过一个快速启动屏幕保护程序的小程序SSLaunch,来介绍应用程序如何向任务栏通知区加入图标、如何禁止多个Win32实例以及屏幕保护程序的有关内容。<br>
          <br>
            SSLaunch用C语言编写,用Visual C++ 5.0编译,是一个基于无模式对话框的程序,同时禁止多个实例,即一次只能有一个实例运行。任务栏通知区图标在对话框初始化时加入,对话框响应程序定义的回调消息,当鼠标左键按下时,弹出一由屏幕保护程序名填充的上下文菜单。对话框关闭(即程序退出)时删除任务栏通知区图标。如果读者有兴趣可以很容易地把它移植成基于 
          MFC 的程序。<br>
          <br>
            1、任务栏通知区<br>
          <br>
            Windows 95的任务栏中有一个通知区, 应用程序可以把一个图标放入其中,以表示操作状态,并可以有与之相关联的工具用作说明控制。当鼠标出现在此图标的矩形边界内时,向相应的应用程序发送应用程序定义的回调消息。应用程序通过发送消息增加、修改、删除任务栏图标。消息的发送通过调用函数Shell_NotifyIcon来完成,如果调用成功,则返回TRUE;否则,返回FALSE。Shell_NotifyIcon函数原形如下:<br>
          WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(<br>
            DWORD dwMessage, // 消息标识符<br>
            PNOTIFYICONDATA pnid // NOTIFYICONDATA 结构<br>
            );<br>
               消息标识符可以是 :<br>
            NIM_ADD 向任务栏通知区加入图标<br>
            NIM_DELETE 从任务栏通知区删除图标<br>
            NIM_MODIFY 改变任务栏通知区图标<br>
               NOTIFYICONDATA 结构:<br>
            typedef struct _NOTIFYICONDATA {<br>
             DWORD cbSize;<br>
             HWND hWnd;<br>
             UINT uID;<br>
             UINT uFlags;<br>
            UINT uCallbackMessage;<br>
            HICON hIcon;<br>
            char szTip[64];<br>
            } NOTIFYICONDATA, *PNOTIFYICONDATA;<br>
               其中:<br>
            cbSize NOTIFYICONDATA 结构大小<br>
            hWnd 接收回调消息窗口句柄<br>
            uID 任务栏通知区图标标识<br>
            uFlags 指定该结构中那些成员有效<br>
            uCallbackMessage 应用程序定义的回调消息<br>
            hIcon 任务栏通知区图标句柄<br>
            szTip 任务栏通知区提示字符串<br>
               参数uFlags可以是下列值的组合:<br>
            NIF_ICON 任务栏通知区图标有效<br>
            NIF_MESSAGE 应用程序定义的回调消息有效<br>
            NIF_TIP 任务栏通知区提示字符串有效<br>
            a.任务栏通知区图标的加入<br>
            BOOL SSLaunch_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)<br>
          <br>
            {<br>
          <br>
             // Add an notification icon to the taskbar<br>
          <br>
             NOTIFYCONDATA nid;<br>
          <br>
             NOTIFYICONDATA nid;<br>
          <br>
            <br>
             nid.cbSize = sizeof(nid);<br>
          <br>
             nid.hWnd = hwnd;<br>
          <br>
             nid.uID = IDI_SSLAUNCH;<br>
          <br>
             nid.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;<br>
          <br>
             nid.uCallbackMessage = WM_SSLAUNCHICONNOTIFY;<br>
          <br>
             nid.hIcon=LoadIcon(GetWindowInstance(hwnd),<br>
          <br>
            KEINTRESOURCE(IDI_SSLAUNCH));<br>
          <br>
             lstrcpyn(nid.szTip,g_szAppName,sizeof(nid.szTip) /sizeof(nid.szTip[0]));<br>
          <br>
            <br>
             return(Shell_NotifyIcon(NIM_ADD, &amp;nid))<br>
          <br>
            }<br>
          <br>
            b.任务栏通知区图标的删除<br>
          <br>
             应用程序退出时,应该删除任务通知区上相应的图标:<br>
            void SSLaunch_OnDestroy(HWND hwnd)<br>
          <br>
            {<br>
          <br>
             // Remove the notification icon from the taskbar<br>
          <br>
            <br>
             NOTIFYICONDATA nid;<br>
          <br>
             nid.cbSize = sizeof(nid);<br>
          <br>
             nid.hWnd = hwnd;<br>
          <br>
             nid.uID = IDI_SSLAUNCH;<br>
          <br>
            <br>
             Shell_NotifyIcon(NIM_DELETE, &amp;nid);<br>
          <br>
            }<br>
          <br>
            c.应用程序定义回调消息的接收<br>
          <br>
            若为任务栏通知区指定了回调消息,则系统会于鼠标事件在此区域发生时<br>
          <br>
            向应用程序发送此消息,其中wParam是任务栏通知区图标标识,lParam<br>
          <br>
            是鼠标事件发生后的鼠标信息。<br>
          <br>
            <br>
            void SSLaunch_OnIconNotify(WPARAM wParam, LPARAM lParam)<br>
          <br>
            {<br>
          <br>
             UINT uID = (UINT)wParam;<br>
          <br>
             UINT uMsg = (UINT)lParam;<br>
          <br>
            <br>
             if(uID == IDI_SSLAUNCH){<br>
          <br>
             switch(uMsg){<br>
          <br>
             case WM_LBUTTONDOWN :<br>
          <br>
             //Do something<br>
          <br>
             break;<br>
          <br>
            <br>
             case WM_LBUTTONUP :<br>
          <br>
             //Do something<br>
          <br>
             break;<br>
          <br>
            <br>
             default :<br>
          <br>
             break;<br>
          <br>
             }<br>
          <br>
             }<br>
          <br>
            }<br>
          <br>
            <br>
            2.禁止多个Win32实例<br>
          <br>
            在讨论禁止多个Win32实例之前,我们先讨论一下WinMain函数。我们知道,任何一个基于GDI的Windows程序以WinMain函数作为入口被系统调用。在Win16中,hPrevInstance指向前一个实例的句柄,但在Win32中,每一个进程都有一个独立的4G地址空间,从0到2G属于进程私有,对其他进程来说是不可见的。所以,在Win32中,hPrevInstance总是为NULL。<br>
          <br>
            <br>
            int WINAPI WinMain(<br>
          <br>
            HINSTANCE hInstance, // handle to current instance<br>
          <br>
            HINSTANCE hPrevInstance, // handle to previous instance<br>
          <br>
            LPSTR lpCmdLine, // pointer to command line<br>
          <br>
            int nCmdShow // show state of window<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -