Ignore:
Timestamp:
Oct 23, 2001, 11:42:23 PM (24 years ago)
Author:
sandervl
Message:

partly implemented draglist support

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/comctl32/draglist.cpp

    r3182 r7175  
    1 /* $Id: draglist.cpp,v 1.2 2000-03-21 17:30:41 cbratschi Exp $ */
     1/* $Id: draglist.cpp,v 1.3 2001-10-23 21:42:23 sandervl Exp $ */
    22/*
    33 * Drag List control
     
    1717
    1818#include "commctrl.h"
     19#include <winnt.h>
    1920#include <misc.h>
    2021
    2122static DWORD dwLastScrollTime = 0;
    2223
     24extern LPSTR COMCTL32_aSubclass; /* global subclassing atom */
    2325
    24 BOOL WINAPI MakeDragList (HWND hwndLB)
    25 {
    26   dprintf(("COMCTL32: MakeDragList - empty stub!"));
    27 
    28   return FALSE;
    29 }
    30 
     26typedef struct {
     27  WNDPROC lpOldWindowProc;
     28  BOOL    isUnicode;
     29  UINT    uMsg;
     30} DRAGLIST_INFO, *LPDRAGLIST_INFO;
    3131
    3232VOID WINAPI DrawInsert (HWND hwndParent, HWND hwndLB, INT nItem)
     
    9393DRAGLIST_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    9494{
     95  LPDRAGLIST_INFO lpDragInfo;
     96  LRESULT ret;
     97  DRAGLISTINFO draglist;
    9598
    96   return FALSE;
     99  lpDragInfo = (LPDRAGLIST_INFO)GetPropA(hwnd, (LPCSTR)COMCTL32_aSubclass);
     100  if(!lpDragInfo) {
     101      if(lpDragInfo->isUnicode) {
     102           return DefWindowProcW(hwnd, uMsg, wParam, lParam);
     103      }
     104      else return DefWindowProcA(hwnd, uMsg, wParam, lParam);
     105  }
     106  switch(uMsg) {
     107  case WM_LBUTTONDOWN:
     108      draglist.uNotification = DL_BEGINDRAG;
     109      draglist.hWnd = hwnd;
     110      draglist.ptCursor.x = LOWORD(lParam);
     111      draglist.ptCursor.y = HIWORD(lParam);
     112      ret = SendMessageA(GetParent(hwnd), (UINT)lpDragInfo->uMsg, GetWindowLongA(hwnd, GWL_ID), (LPARAM)&draglist);
     113      goto defaultmsg; //correct?
     114
     115  case WM_NCDESTROY:
     116      if(lpDragInfo->isUnicode) {
     117           ret = CallWindowProcW(lpDragInfo->lpOldWindowProc, hwnd, uMsg, wParam, lParam);
     118      }
     119      else ret = CallWindowProcA(lpDragInfo->lpOldWindowProc, hwnd, uMsg, wParam, lParam);
     120
     121      SetWindowLongA(hwnd, GWL_WNDPROC, (LONG)lpDragInfo->lpOldWindowProc);
     122      SetPropA(hwnd, (LPCSTR)COMCTL32_aSubclass, NULL);
     123      COMCTL32_Free(lpDragInfo);
     124      break;
     125
     126defaultmsg:
     127  default:
     128      if(lpDragInfo->isUnicode) {
     129           return CallWindowProcW(lpDragInfo->lpOldWindowProc, hwnd, uMsg, wParam, lParam);
     130      }
     131      else return CallWindowProcA(lpDragInfo->lpOldWindowProc, hwnd, uMsg, wParam, lParam);
     132  }
     133  return 0;
    97134}
     135
     136BOOL WINAPI MakeDragList (HWND hwndLB)
     137{
     138  LPDRAGLIST_INFO lpDragInfo;
     139
     140  dprintf(("COMCTL32: MakeDragList %x - partly implemented", hwndLB));
     141
     142  lpDragInfo = (LPDRAGLIST_INFO)COMCTL32_Alloc(sizeof(DRAGLIST_INFO));
     143  if(SetPropA(hwndLB, (LPCSTR)COMCTL32_aSubclass, (HANDLE)lpDragInfo) == FALSE) {
     144      COMCTL32_Free(lpDragInfo);
     145      return FALSE;
     146  }
     147  lpDragInfo->lpOldWindowProc = (WNDPROC)SetWindowLongA(hwndLB, GWL_WNDPROC, (LONG)DRAGLIST_WindowProc);
     148  lpDragInfo->isUnicode       = IsWindowUnicode(hwndLB);
     149  lpDragInfo->uMsg            = RegisterWindowMessageA(DRAGLISTMSGSTRINGA);
     150  return TRUE;
     151}
Note: See TracChangeset for help on using the changeset viewer.