【Demo 0041】图钉桌面

将一个窗体钉在桌面上, 在任务上不显示, 操作Window提供的显示桌面的功能也不会最小化, windows自带的便笺软件功能很好用,但有两个功能个人认人产品化做的很不好,第一、显示在任务栏(便笺的目的就是提示自己要做的事,所有应该一直挂在桌面上,而任务栏原本空间就有限,如果占用任务样影响了正常的工作), 其二、点击桌面时会被最小化, 被最小化了就失去了便笺) 为了实现以上不足我想这个软件应该是钉在桌面上的。

实现方法要点:

1.  读取Window Desktop 窗体中ListView 控件;

2.  将此窗体的父窗体设置为步骤1返回窗体句柄即可;

一、关键代码块

     1. 查到桌面控件(可适用于WindowXP, Window7)

BOOL CALLBACK EnumWndProc ( HWND hWnd , LPARAM lParam )
{
     HWND * hParent = ( HWND *) lParam ;
     TCHAR szClassName [ MAX_PATH ];
     GetClassName ( hWnd , szClassName , MAX_PATH );
     if ( NULL != GetWindow ( hWnd , GW_CHILD ))
     {
         HWND hShellDLL = FindWindowEx ( hWnd , NULL , _T ( "SHELLDLL_DefView" ), NULL );
         if ( NULL != hShellDLL )
         {            
             HWND hListView = FindWindowEx ( hShellDLL , 0, _T ( "SysListView32" ), NULL );
             if ( NULL != hListView )
             {
                 * hParent = hListView ;
                 return FALSE ;
             }
         }
     }

     return TRUE ;
}

     2.  将窗体作为桌面窗体的子控件

HWND hListView ;
EnumWindows ( EnumWndProc , ( LPARAM )& hListView );
if ( NULL != hListView )
{

     SetWindowLong ( hWnd , GWL_STYLE , GetWindowLong ( hWnd , GWL_STYLE ) & ~( WS_CAPTION | WS_THICKFRAME ));   
     SetParent ( hWnd , hListView );
}

二、效果

   【Demo 0041】图钉桌面_第1张图片

 

演示代码

你可能感兴趣的:(demo)