Ignore:
Timestamp:
Feb 25, 2000, 6:00:18 PM (26 years ago)
Author:
cbratschi
Message:

unicode and other changes

File:
1 edited

Legend:

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

    r2875 r2895  
    1 /* $Id: header.cpp,v 1.1 2000-02-23 17:09:42 cbratschi Exp $ */
     1/* $Id: header.cpp,v 1.2 2000-02-25 17:00:15 cbratschi Exp $ */
    22/*
    33 *  Header control
     
    2121#include "winbase.h"
    2222#include "commctrl.h"
     23#include "ccbase.h"
    2324#include "header.h"
    2425#include "comctl32.h"
     
    3334#define TIMER_MS       200
    3435
    35 #define HEADER_GetInfoPtr(hwnd) ((HEADER_INFO *)GetWindowLongA(hwnd,0))
     36#define HEADER_GetInfoPtr(hwnd) ((HEADER_INFO*)getInfoPtr(hwnd))
    3637
    3738static VOID
     
    4647    if (phdi->iImage == I_IMAGECALLBACK)
    4748    {
    48       if (IsWindowUnicode(GetParent(hwnd)))
    49       {
    50         NMHDDISPINFOW nmhdr;
    51 
    52         nmhdr.hdr.hwndFrom = hwnd;
    53         nmhdr.hdr.idFrom   = GetWindowLongW(hwnd,GWL_ID);
    54         nmhdr.hdr.code     = HDN_GETDISPINFOW;
    55         nmhdr.iItem      = iItem;
    56         nmhdr.mask       = HDI_IMAGE;
    57         nmhdr.iImage     = 0;
    58         nmhdr.lParam     = phdi->lParam;
    59 
    60         SendMessageW(GetParent(hwnd),WM_NOTIFY,(WPARAM)nmhdr.hdr.idFrom,(LPARAM)&nmhdr);
    61 
    62         iImage = nmhdr.iImage;
    63         if (nmhdr.mask & HDI_DI_SETITEM) phdi->iImage = iImage;
    64       } else
    65       {
    66         NMHDDISPINFOA nmhdr;
    67 
    68         nmhdr.hdr.hwndFrom = hwnd;
    69         nmhdr.hdr.idFrom   = GetWindowLongA(hwnd,GWL_ID);
    70         nmhdr.hdr.code     = HDN_GETDISPINFOA;
    71         nmhdr.iItem      = iItem;
    72         nmhdr.mask       = HDI_IMAGE;
    73         nmhdr.iImage     = 0;
    74         nmhdr.lParam     = phdi->lParam;
    75 
    76         SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)nmhdr.hdr.idFrom,(LPARAM)&nmhdr);
    77 
    78         iImage = nmhdr.iImage;
    79         if (nmhdr.mask & HDI_DI_SETITEM) phdi->iImage = iImage;
    80       }
     49      NMHDDISPINFOW nmhdr;
     50
     51      nmhdr.iItem      = iItem;
     52      nmhdr.mask       = HDI_IMAGE;
     53      nmhdr.iImage     = 0;
     54      nmhdr.lParam     = phdi->lParam;
     55      sendNotify(hwnd,isUnicodeNotify(&infoPtr->header) ? HDN_GETDISPINFOW:HDN_GETDISPINFOA,&nmhdr.hdr);
     56
     57      iImage = nmhdr.iImage;
     58      if (nmhdr.mask & HDI_DI_SETITEM) phdi->iImage = iImage;
    8159    } else iImage = phdi->iImage;
    8260
     
    280258      if (phdi->pszText == LPSTR_TEXTCALLBACKW)
    281259      {
    282         if (IsWindowUnicode(GetParent(hwnd)))
    283         {
    284           NMHDDISPINFOW nmhdr;
    285 
    286           nmhdr.hdr.hwndFrom = hwnd;
    287           nmhdr.hdr.idFrom   = GetWindowLongW(hwnd,GWL_ID);
    288           nmhdr.hdr.code     = HDN_GETDISPINFOW;
    289           nmhdr.iItem      = iItem;
    290           nmhdr.mask       = HDI_TEXT;
    291           nmhdr.cchTextMax = phdi->cchTextMax;
     260        NMHDDISPINFOW nmhdr;
     261
     262        nmhdr.iItem      = iItem;
     263        nmhdr.mask       = HDI_TEXT;
     264        nmhdr.cchTextMax = phdi->cchTextMax;
     265        if (isUnicodeNotify(&infoPtr->header))
     266        {
    292267          nmhdr.pszText    = (WCHAR*)COMCTL32_Alloc(phdi->cchTextMax*sizeof(WCHAR));
    293268          if (nmhdr.pszText) nmhdr.pszText[0] = 0;
    294           nmhdr.lParam     = phdi->lParam;
    295 
    296           SendMessageW(GetParent(hwnd),WM_NOTIFY,(WPARAM)nmhdr.hdr.idFrom,(LPARAM)&nmhdr);
    297 
    298           pszText = nmhdr.pszText;
    299           if (nmhdr.mask & HDI_DI_SETITEM)
     269        } else
     270        {
     271          nmhdr.pszText    = (WCHAR*)COMCTL32_Alloc(phdi->cchTextMax*sizeof(CHAR));
     272          if (nmhdr.pszText) ((LPSTR)nmhdr.pszText)[0] = 0;
     273        }
     274        nmhdr.lParam     = phdi->lParam;
     275        sendNotify(hwnd,isUnicodeNotify(&infoPtr->header) ? HDN_GETDISPINFOW:HDN_GETDISPINFOA,&nmhdr.hdr);
     276
     277        pszText = nmhdr.pszText;
     278        if (nmhdr.mask & HDI_DI_SETITEM)
     279        {
     280          if (isUnicodeNotify(&infoPtr->header))
    300281          {
    301282            INT len = pszText ? lstrlenW(pszText):0;
     
    308289            COMCTL32_Free(pszText);
    309290            pszText = phdi->pszText;
     291          } else
     292          {
     293            INT len = nmhdr.pszText ? lstrlenA((LPSTR)nmhdr.pszText):0;
     294
     295            if (len)
     296            {
     297              pszText = (WCHAR*)COMCTL32_Alloc((len+1)*sizeof(WCHAR));
     298              lstrcpyAtoW(pszText,(LPSTR)nmhdr.pszText);
     299            } else pszText = NULL;
     300            COMCTL32_Free(nmhdr.pszText);
     301
     302            if (nmhdr.mask & HDI_DI_SETITEM)
     303              phdi->pszText = pszText;
    310304          }
    311         } else
    312         {
    313           NMHDDISPINFOA nmhdr;
    314           INT len;
    315 
    316           nmhdr.hdr.hwndFrom = hwnd;
    317           nmhdr.hdr.idFrom   = GetWindowLongA(hwnd,GWL_ID);
    318           nmhdr.hdr.code     = HDN_GETDISPINFOA;
    319           nmhdr.iItem      = iItem;
    320           nmhdr.mask       = HDI_TEXT;
    321           nmhdr.cchTextMax = phdi->cchTextMax;
    322           nmhdr.pszText    = (CHAR*)COMCTL32_Alloc(phdi->cchTextMax);
    323           if (nmhdr.pszText) nmhdr.pszText[0] = 0;
    324           nmhdr.lParam     = phdi->lParam;
    325 
    326           SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)nmhdr.hdr.idFrom,(LPARAM)&nmhdr);
    327 
    328           len = nmhdr.pszText ? lstrlenA(nmhdr.pszText):0;
    329 
    330           if (len)
    331           {
    332             pszText = (WCHAR*)COMCTL32_Alloc((len+1)*sizeof(WCHAR));
    333             lstrcpyAtoW(pszText,nmhdr.pszText);
    334           } else pszText = NULL;
    335           COMCTL32_Free(nmhdr.pszText);
    336 
    337           if (nmhdr.mask & HDI_DI_SETITEM)
    338             phdi->pszText = pszText;
    339305        }
    340306      }
     
    395361
    396362    //Custom draw
    397     cdraw.hdr.hwndFrom = hwnd;
    398     cdraw.hdr.idFrom   = GetWindowLongA(hwnd,GWL_ID);
    399     cdraw.hdr.code     = NM_CUSTOMDRAW;
    400363    cdraw.dwDrawStage  = CDDS_PREPAINT;
    401364    cdraw.hdc          = hdc;
     
    405368    cdraw.lItemlParam  = 0;
    406369
    407     cdctlres = SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)cdraw.hdr.idFrom,(LPARAM)&cdraw);
     370    cdctlres = sendNotify(hwnd,NM_CUSTOMDRAW,&cdraw.hdr);
    408371
    409372    if (cdctlres & CDRF_SKIPDEFAULT) return;
     
    426389        cdraw.rc             = infoPtr->items[x].rect;
    427390
    428         cdres = SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)cdraw.hdr.idFrom,(LPARAM)&cdraw);
     391        cdres = sendNotify(hwnd,NM_CUSTOMDRAW,&cdraw.hdr);
    429392      } else cdres = 0;
    430393
     
    442405          cdraw.dwDrawStage    = CDDS_ITEMPOSTPAINT;
    443406
    444           SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)cdraw.hdr.idFrom,(LPARAM)&cdraw);
     407          sendNotify(hwnd,NM_CUSTOMDRAW,&cdraw.hdr);
    445408        }
    446409      }
    447410    }
    448411
    449     if (x != -1 && (x <= rect.right) && (infoPtr->uNumItem > 0))
     412    if ((x != -1) && (x <= rect.right) && (infoPtr->uNumItem > 0))
    450413    {
    451414      rect.left = x;
     
    462425    if (infoPtr->bDragDrop)
    463426    {
    464       if (infoPtr->iDragItem != infoPtr->iMoveItem && infoPtr->iDragItem != infoPtr->iMoveItem+1 && infoPtr->iDragItem != -1)
     427      if ((infoPtr->iDragItem != infoPtr->iMoveItem) && (infoPtr->iDragItem != infoPtr->iMoveItem+1) && (infoPtr->iDragItem != -1))
    465428      {
    466429        INT x,y,width;
     
    502465      GetClientRect(hwnd,&cdraw.rc);
    503466
    504       SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)cdraw.hdr.idFrom,(LPARAM)&cdraw);
     467      sendNotify(hwnd,NM_CUSTOMDRAW,&cdraw.hdr);
    505468    }
    506469}
     
    699662}
    700663
    701 static BOOL
    702 HEADER_SendSimpleNotify (HWND hwnd, UINT code)
    703 {
    704     NMHDR nmhdr;
    705 
    706     nmhdr.hwndFrom = hwnd;
    707     nmhdr.idFrom   = GetWindowLongA (hwnd, GWL_ID);
    708     nmhdr.code     = code;
    709 
    710     return (BOOL)SendMessageA (GetParent (hwnd), WM_NOTIFY,
    711                                    (WPARAM)nmhdr.idFrom, (LPARAM)&nmhdr);
    712 }
    713 
    714 static BOOL
    715 HEADER_SendHeaderNotifyA(HWND hwnd,UINT code,INT iItem,INT iButton)
     664static BOOL HEADER_SendHeaderNotify(HWND hwnd,UINT code,INT iItem,INT iButton,BOOL unicode)
    716665{
    717666    HEADER_INFO *infoPtr = HEADER_GetInfoPtr(hwnd);
    718     NMHEADERA nmhdr;
    719     HDITEMA nmitem;
    720     char* text;
     667    NMHEADERW nmhdr;
     668    HDITEMW nmitem;
     669    char* text = NULL;
    721670    BOOL res;
    722671
    723     if (infoPtr->items[iItem].pszText)
    724     {
    725       INT len = lstrlenW(infoPtr->items[iItem].pszText);
    726 
    727       if (len > 0)
    728       {
    729         text = (CHAR*)COMCTL32_Alloc(len+1);
    730         lstrcpyWtoA(text,infoPtr->items[iItem].pszText);
    731       } else text = NULL;
    732     } else text = NULL;
    733 
    734     nmhdr.hdr.hwndFrom = hwnd;
    735     nmhdr.hdr.idFrom   = GetWindowLongA(hwnd,GWL_ID);
    736     nmhdr.hdr.code = code;
     672
     673    if (unicode)
     674    {
     675      nmitem.pszText = infoPtr->items[iItem].pszText;
     676    } else
     677    {
     678      if (infoPtr->items[iItem].pszText)
     679      {
     680        INT len = lstrlenW(infoPtr->items[iItem].pszText);
     681
     682        if (len > 0)
     683        {
     684          text = (CHAR*)COMCTL32_Alloc(len+1);
     685          lstrcpyWtoA(text,infoPtr->items[iItem].pszText);
     686        }
     687      }
     688      nmitem.pszText = (LPWSTR)text;
     689    }
     690
    737691    nmhdr.iItem   = iItem;
    738692    nmhdr.iButton = 0;
     
    742696    nmitem.cxy        = infoPtr->items[iItem].cxy;
    743697    nmitem.hbm        = infoPtr->items[iItem].hbm;
    744     nmitem.pszText    = text;
    745698    nmitem.cchTextMax = infoPtr->items[iItem].cchTextMax;
    746699    nmitem.fmt        = infoPtr->items[iItem].fmt;
     
    751704    nmitem.pvFilter   = infoPtr->items[iItem].pvFilter;
    752705
    753     res = (BOOL)SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)nmhdr.hdr.idFrom,(LPARAM)&nmhdr);
     706    res = (BOOL)sendNotify(hwnd,code,&nmhdr.hdr);
    754707
    755708    if (text) COMCTL32_Free(text);
     
    758711}
    759712
    760 static BOOL
    761 HEADER_SendHeaderNotifyW(HWND hwnd,UINT code,INT iItem,INT iButton)
    762 {
    763     HEADER_INFO *infoPtr = HEADER_GetInfoPtr(hwnd);
    764     NMHEADERW nmhdr;
    765     HDITEMW nmitem;
    766 
    767     nmhdr.hdr.hwndFrom = hwnd;
    768     nmhdr.hdr.idFrom   = GetWindowLongW(hwnd,GWL_ID);
    769     nmhdr.hdr.code = code;
    770     nmhdr.iItem   = iItem;
    771     nmhdr.iButton = 0;
    772     nmhdr.pitem   = &nmitem;
    773 
    774     nmitem.mask       = 0;
    775     nmitem.cxy        = infoPtr->items[iItem].cxy;
    776     nmitem.hbm        = infoPtr->items[iItem].hbm;
    777     nmitem.pszText    = infoPtr->items[iItem].pszText;
    778     nmitem.cchTextMax = infoPtr->items[iItem].cchTextMax;
    779     nmitem.fmt        = infoPtr->items[iItem].fmt;
    780     nmitem.lParam     = infoPtr->items[iItem].lParam;
    781     nmitem.iImage     = infoPtr->items[iItem].iImage;
    782     nmitem.iOrder     = infoPtr->items[iItem].iOrder;
    783     nmitem.type       = infoPtr->items[iItem].type;
    784     nmitem.pvFilter   = infoPtr->items[iItem].pvFilter;
    785 
    786     return (BOOL)SendMessageW(GetParent(hwnd),WM_NOTIFY,(WPARAM)nmhdr.hdr.idFrom,(LPARAM)&nmhdr);
    787 }
    788 
    789 static BOOL
    790 HEADER_SendItemChanging(HWND hwnd,INT iItem)
    791 {
    792   if (IsWindowUnicode(GetParent(hwnd)))
    793     return HEADER_SendHeaderNotifyA(hwnd,HDN_ITEMCHANGINGA,iItem,0);
    794   else
    795     return HEADER_SendHeaderNotifyW(hwnd,HDN_ITEMCHANGINGW,iItem,0);
    796 }
    797 
    798 static BOOL
    799 HEADER_SendItemChanged(HWND hwnd,INT iItem)
    800 {
    801   if (IsWindowUnicode(GetParent(hwnd)))
    802     return HEADER_SendHeaderNotifyA(hwnd,HDN_ITEMCHANGEDA,iItem,0);
    803   else
    804     return HEADER_SendHeaderNotifyW(hwnd,HDN_ITEMCHANGEDW,iItem,0);
    805 }
    806 
    807 static BOOL
    808 HEADER_SendItemDblClick(HWND hwnd,INT iItem,INT iButton)
    809 {
    810   if (IsWindowUnicode(GetParent(hwnd)))
    811     return HEADER_SendHeaderNotifyA(hwnd,HDN_ITEMDBLCLICKA,iItem,iButton);
    812   else
    813     return HEADER_SendHeaderNotifyW(hwnd,HDN_ITEMDBLCLICKW,iItem,iButton);
    814 }
    815 
    816 static BOOL
    817 HEADER_SendDividerDblClick(HWND hwnd,INT iItem,INT iButton)
    818 {
    819   if (IsWindowUnicode(GetParent(hwnd)))
    820     return HEADER_SendHeaderNotifyA(hwnd,HDN_DIVIDERDBLCLICKA,iItem,iButton);
    821   else
    822     return HEADER_SendHeaderNotifyW(hwnd,HDN_DIVIDERDBLCLICKW,iItem,iButton);
    823 }
    824 
    825 static BOOL
    826 HEADER_SendBeginTrack(HWND hwnd,INT iItem,INT iButton)
    827 {
    828   if (IsWindowUnicode(GetParent(hwnd)))
    829     return HEADER_SendHeaderNotifyA(hwnd,HDN_BEGINTRACKA,iItem,iButton);
    830   else
    831     return HEADER_SendHeaderNotifyW(hwnd,HDN_BEGINTRACKW,iItem,iButton);
    832 }
    833 
    834 static BOOL
    835 HEADER_SendEndTrack(HWND hwnd,INT iItem,INT iButton)
    836 {
    837   if (IsWindowUnicode(GetParent(hwnd)))
    838     return HEADER_SendHeaderNotifyA(hwnd,HDN_ENDTRACKA,iItem,iButton);
    839   else
    840     return HEADER_SendHeaderNotifyW(hwnd,HDN_ENDTRACKW,iItem,iButton);
    841 }
    842 
    843 static BOOL
    844 HEADER_SendTrack(HWND hwnd,INT iItem)
    845 {
    846   if (IsWindowUnicode(GetParent(hwnd)))
    847     return HEADER_SendHeaderNotifyA(hwnd,HDN_TRACKA,iItem,0);
    848   else
    849     return HEADER_SendHeaderNotifyW(hwnd,HDN_TRACKW,iItem,0);
    850 }
    851 
    852 static BOOL
    853 HEADER_SendClickNotifyA(HWND hwnd,UINT code,INT iItem,INT iButton)
    854 {
    855     NMHEADERA nmhdr;
    856 
    857     nmhdr.hdr.hwndFrom = hwnd;
    858     nmhdr.hdr.idFrom   = GetWindowLongA(hwnd,GWL_ID);
    859     nmhdr.hdr.code     = code;
    860     nmhdr.iItem        = iItem;
    861     nmhdr.iButton      = iButton;
    862     nmhdr.pitem        = NULL;
    863 
    864     return (BOOL)SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)nmhdr.hdr.idFrom,(LPARAM)&nmhdr);
    865 }
    866 
    867 static BOOL
    868 HEADER_SendClickNotifyW(HWND hwnd,UINT code,INT iItem,INT iButton)
    869 {
    870     NMHEADERW nmhdr;
    871 
    872     nmhdr.hdr.hwndFrom = hwnd;
    873     nmhdr.hdr.idFrom   = GetWindowLongW(hwnd,GWL_ID);
    874     nmhdr.hdr.code     = code;
    875     nmhdr.iItem        = iItem;
    876     nmhdr.iButton      = iButton;
    877     nmhdr.pitem        = NULL;
    878 
    879     return (BOOL)SendMessageW(GetParent(hwnd),WM_NOTIFY,(WPARAM)nmhdr.hdr.idFrom,(LPARAM)&nmhdr);
    880 }
    881 
    882 static BOOL
    883 HEADER_SendItemClick(HWND hwnd,INT iItem,INT iButton)
    884 {
    885   if (IsWindowUnicode(GetParent(hwnd)))
    886     return HEADER_SendClickNotifyA(hwnd,HDN_ITEMCLICKA,iItem,iButton);
    887   else
    888     return HEADER_SendClickNotifyW(hwnd,HDN_ITEMCLICKW,iItem,iButton);
    889 }
    890 
    891 static BOOL
    892 HEADER_SendDragNotify(HWND hwnd,UINT code,INT iItem,INT iButton)
    893 {
    894     NMHEADERA nmhdr;
    895 
    896     nmhdr.hdr.hwndFrom = hwnd;
    897     nmhdr.hdr.idFrom   = GetWindowLongA(hwnd,GWL_ID);
    898     nmhdr.hdr.code     = code;
    899     nmhdr.iItem        = iItem;
    900     nmhdr.iButton      = iButton;
    901     nmhdr.pitem        = NULL;
    902 
    903     return (BOOL)SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)nmhdr.hdr.idFrom,(LPARAM)&nmhdr);
    904 }
    905 
    906 static BOOL
    907 HEADER_SendFilterBtnClick(HWND hwnd,INT iItem,RECT iRect)
    908 {
    909     NMHDFILTERBTNCLICK nmhdr;
    910 
    911     nmhdr.hdr.hwndFrom = hwnd;
    912     nmhdr.hdr.idFrom   = GetWindowLongA(hwnd,GWL_ID);
    913     nmhdr.hdr.code = HDN_FILTERBTNCLICK;
    914     nmhdr.iItem    = iItem;
    915     nmhdr.rc       = iRect;
    916 
    917     return (BOOL)SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)nmhdr.hdr.idFrom,(LPARAM)&nmhdr);
     713static BOOL HEADER_SendItemChanging(HWND hwnd,INT iItem)
     714{
     715  BOOL unicode = isUnicodeNotify(hwnd);
     716
     717  return HEADER_SendHeaderNotify(hwnd,unicode ? HDN_ITEMCHANGINGW:HDN_ITEMCHANGINGA,iItem,0,unicode);
     718}
     719
     720static BOOL HEADER_SendItemChanged(HWND hwnd,INT iItem)
     721{
     722  BOOL unicode = isUnicodeNotify(hwnd);
     723
     724  return HEADER_SendHeaderNotify(hwnd,unicode ? HDN_ITEMCHANGEDW:HDN_ITEMCHANGEDA,iItem,0,unicode);
     725}
     726
     727static BOOL HEADER_SendItemDblClick(HWND hwnd,INT iItem,INT iButton)
     728{
     729  BOOL unicode = isUnicodeNotify(hwnd);
     730
     731  return HEADER_SendHeaderNotify(hwnd,unicode ? HDN_ITEMDBLCLICKW:HDN_ITEMDBLCLICKA,iItem,iButton,unicode);
     732}
     733
     734static BOOL HEADER_SendDividerDblClick(HWND hwnd,INT iItem,INT iButton)
     735{
     736  BOOL unicode = isUnicodeNotify(hwnd);
     737
     738  return HEADER_SendHeaderNotify(hwnd,unicode ? HDN_DIVIDERDBLCLICKW:HDN_DIVIDERDBLCLICKA,iItem,iButton,unicode);
     739}
     740
     741static BOOL HEADER_SendBeginTrack(HWND hwnd,INT iItem,INT iButton)
     742{
     743  BOOL unicode = isUnicodeNotify(hwnd);
     744
     745  return HEADER_SendHeaderNotify(hwnd,unicode ? HDN_BEGINTRACKW:HDN_BEGINTRACKA,iItem,iButton,unicode);
     746}
     747
     748static BOOL HEADER_SendEndTrack(HWND hwnd,INT iItem,INT iButton)
     749{
     750  BOOL unicode = isUnicodeNotify(hwnd);
     751
     752  return HEADER_SendHeaderNotify(hwnd,unicode ? HDN_ENDTRACKW:HDN_ENDTRACKA,iItem,iButton,unicode);
     753}
     754
     755static BOOL HEADER_SendTrack(HWND hwnd,INT iItem)
     756{
     757  BOOL unicode = isUnicodeNotify(hwnd);
     758
     759  return HEADER_SendHeaderNotify(hwnd,unicode ? HDN_TRACKW:HDN_TRACKA,iItem,0,unicode);
     760}
     761
     762static BOOL HEADER_SendClickNotify(HWND hwnd,UINT code,INT iItem,INT iButton,BOOL unicode)
     763{
     764  NMHEADERW nmhdr;
     765
     766  nmhdr.iItem   = iItem;
     767  nmhdr.iButton = iButton;
     768  nmhdr.pitem   = NULL;
     769
     770  return (BOOL)sendNotify(hwnd,code,&nmhdr.hdr);
     771}
     772
     773static BOOL HEADER_SendItemClick(HWND hwnd,INT iItem,INT iButton)
     774{
     775  BOOL unicode = isUnicodeNotify(hwnd);
     776
     777  return HEADER_SendClickNotify(hwnd,unicode ? HDN_ITEMCLICKW:HDN_ITEMCLICKA,iItem,iButton,unicode);
     778}
     779
     780static BOOL HEADER_SendDragNotify(HWND hwnd,UINT code,INT iItem,INT iButton)
     781{
     782  NMHEADERW nmhdr;
     783
     784  nmhdr.iItem   = iItem;
     785  nmhdr.iButton = iButton;
     786  nmhdr.pitem   = NULL;
     787
     788  return (BOOL)sendNotify(hwnd,code,&nmhdr.hdr);
     789}
     790
     791static BOOL HEADER_SendFilterBtnClick(HWND hwnd,INT iItem,RECT iRect)
     792{
     793  NMHDFILTERBTNCLICK nmhdr;
     794
     795  nmhdr.iItem    = iItem;
     796  nmhdr.rc       = iRect;
     797
     798  return (BOOL)sendNotify(hwnd,HDN_FILTERBTNCLICK,&nmhdr.hdr);
    918799}
    919800
     
    921802HEADER_SendFilterChange(HWND hwnd,INT iItem)
    922803{
    923     NMHEADERA nmhdr;
    924 
    925     nmhdr.hdr.hwndFrom = hwnd;
    926     nmhdr.hdr.idFrom   = GetWindowLongA(hwnd,GWL_ID);
    927     nmhdr.hdr.code     = HDN_FILTERCHANGE;
    928     nmhdr.iItem        = iItem;
    929     nmhdr.iButton      = 0;
    930     nmhdr.pitem        = NULL;
    931 
    932     return (BOOL)SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)nmhdr.hdr.idFrom,(LPARAM)&nmhdr);
     804  NMHEADERW nmhdr;
     805
     806  nmhdr.iItem        = iItem;
     807  nmhdr.iButton      = 0;
     808  nmhdr.pitem        = NULL;
     809
     810  return (BOOL)sendNotify(hwnd,HDN_FILTERCHANGE,&nmhdr.hdr);
    933811}
    934812
     
    11381016
    11391017
    1140 static LRESULT
    1141 HEADER_GetItemA (HWND hwnd, WPARAM wParam, LPARAM lParam)
     1018static LRESULT HEADER_GetItem(HWND hwnd,WPARAM wParam,LPARAM lParam,BOOL unicode)
    11421019{
    11431020    HEADER_INFO *infoPtr = HEADER_GetInfoPtr(hwnd);
    1144     HDITEMA   *phdi = (HDITEMA*)lParam;
    1145     INT       nItem = (INT)wParam;
     1021    HDITEMW     *phdi = (HDITEMW*)lParam;
     1022    INT          nItem = (INT)wParam;
    11461023    HEADER_ITEM *lpItem;
    11471024
     
    11491026    if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem)) return FALSE;
    11501027
    1151 //    TRACE (header, "[nItem=%d]\n", nItem);
    1152 
    11531028    if (phdi->mask == 0) return TRUE;
    11541029
     
    11781053      {
    11791054        if (lpItem->pszText)
    1180           lstrcpynWtoA (phdi->pszText,lpItem->pszText,phdi->cchTextMax);
    1181         else
    1182           phdi->pszText = NULL;
    1183       } else phdi->pszText = LPSTR_TEXTCALLBACKA;
     1055        {
     1056          if (unicode)
     1057            lstrcpynW (phdi->pszText,lpItem->pszText,phdi->cchTextMax);
     1058          else
     1059            lstrcpynWtoA((LPSTR)phdi->pszText,lpItem->pszText,phdi->cchTextMax);
     1060        } else phdi->pszText = NULL;
     1061      } else
     1062      {
     1063        phdi->pszText = unicode ? LPSTR_TEXTCALLBACKW:(LPWSTR)LPSTR_TEXTCALLBACKA;
     1064      }
    11841065    }
    11851066
    11861067    return TRUE;
    11871068}
    1188 
    1189 static LRESULT
    1190 HEADER_GetItemW (HWND hwnd, WPARAM wParam, LPARAM lParam)
    1191 {
    1192     HEADER_INFO *infoPtr = HEADER_GetInfoPtr(hwnd);
    1193     HDITEMW   *phdi = (HDITEMW*)lParam;
    1194     INT       nItem = (INT)wParam;
    1195     HEADER_ITEM *lpItem;
    1196 
    1197     if (!phdi) return FALSE;
    1198     if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem)) return FALSE;
    1199 
    1200 //    TRACE (header, "[nItem=%d]\n", nItem);
    1201 
    1202     if (phdi->mask == 0) return TRUE;
    1203 
    1204     lpItem = (HEADER_ITEM*)&infoPtr->items[nItem];
    1205 
    1206     if (phdi->mask & HDI_BITMAP) phdi->hbm = lpItem->hbm;
    1207 
    1208     if (phdi->mask & HDI_FORMAT) phdi->fmt = lpItem->fmt;
    1209 
    1210     if (phdi->mask & HDI_FILTER)
    1211     {
    1212       phdi->type = lpItem->type;
    1213       phdi->pvFilter = lpItem->pvFilter;
    1214     }
    1215 
    1216     if (phdi->mask & (HDI_WIDTH | HDI_HEIGHT)) phdi->cxy = lpItem->cxy;
    1217 
    1218     if (phdi->mask & HDI_IMAGE) phdi->iImage = lpItem->iImage;
    1219 
    1220     if (phdi->mask & HDI_LPARAM) phdi->lParam = lpItem->lParam;
    1221 
    1222     if (phdi->mask & HDI_ORDER) phdi->iOrder = lpItem->iOrder;
    1223 
    1224     if (phdi->mask & HDI_TEXT)
    1225     {
    1226       if (lpItem->pszText != LPSTR_TEXTCALLBACKW)
    1227       {
    1228         if (lpItem->pszText)
    1229           lstrcpynW (phdi->pszText,lpItem->pszText,phdi->cchTextMax);
    1230         else
    1231           phdi->pszText = NULL;
    1232       } else phdi->pszText = LPSTR_TEXTCALLBACKW;
    1233     }
    1234 
    1235     return TRUE;
    1236 }
    1237 
    12381069
    12391070static LRESULT
     
    13381169
    13391170static LRESULT
    1340 HEADER_GetUnicodeFormat (HWND hwnd)
    1341 {
    1342     HEADER_INFO *infoPtr = HEADER_GetInfoPtr(hwnd);
    1343 
    1344     return infoPtr->bUnicode;
    1345 }
    1346 
    1347 
    1348 static LRESULT
    13491171HEADER_HitTest (HWND hwnd, WPARAM wParam, LPARAM lParam)
    13501172{
     
    13571179
    13581180
    1359 static LRESULT
    1360 HEADER_InsertItemA (HWND hwnd, WPARAM wParam, LPARAM lParam)
     1181static LRESULT HEADER_InsertItem(HWND hwnd,WPARAM wParam,LPARAM lParam,BOOL unicode)
    13611182{
    13621183    HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd);
    1363     HDITEMA *phdi = (HDITEMA*)lParam;
    1364     INT nItem = (INT)wParam;
     1184    HDITEMW     *phdi = (HDITEMW*)lParam;
     1185    INT          nItem = (INT)wParam;
    13651186    HEADER_ITEM *lpItem;
    13661187
     
    13971218    lpItem->bDown = FALSE;
    13981219
    1399     lpItem->cxy = (phdi->mask & HDI_WIDTH || phdi->mask & HDI_HEIGHT) ? phdi->cxy:0;
     1220    lpItem->cxy = ((phdi->mask & HDI_WIDTH) || (phdi->mask & HDI_HEIGHT)) ? phdi->cxy:0;
    14001221
    14011222    if (phdi->mask & HDI_TEXT)
    14021223    {
    14031224      if (!phdi->pszText) lpItem->pszText = NULL;
    1404       else if (phdi->pszText != LPSTR_TEXTCALLBACKA)
    1405       {
    1406         INT len;
    1407 
    1408         len = lstrlenA(phdi->pszText);
    1409         if (len == 0) lpItem->pszText = NULL; else
    1410         {
    1411           lpItem->pszText = (WCHAR*)COMCTL32_Alloc((len+1)*sizeof(WCHAR));
    1412           lstrcpyAtoW(lpItem->pszText,phdi->pszText);
    1413         }
    1414       } else lpItem->pszText = LPSTR_TEXTCALLBACKW;
     1225      else if (unicode)
     1226      {
     1227        if (phdi->pszText != LPSTR_TEXTCALLBACKW)
     1228        {
     1229          INT len;
     1230
     1231          len = lstrlenW(phdi->pszText);
     1232          if (len == 0) lpItem->pszText = NULL; else
     1233          {
     1234            lpItem->pszText = (WCHAR*)COMCTL32_Alloc((len+1)*sizeof(WCHAR));
     1235            lstrcpyW(lpItem->pszText,phdi->pszText);
     1236          }
     1237        } else lpItem->pszText = LPSTR_TEXTCALLBACKW;
     1238      } else
     1239      {
     1240        if ((LPSTR)phdi->pszText != LPSTR_TEXTCALLBACKA)
     1241        {
     1242          INT len;
     1243
     1244          len = lstrlenA((LPSTR)phdi->pszText);
     1245          if (len == 0) lpItem->pszText = NULL; else
     1246          {
     1247            lpItem->pszText = (WCHAR*)COMCTL32_Alloc((len+1)*sizeof(WCHAR));
     1248            lstrcpyAtoW(lpItem->pszText,(LPSTR)phdi->pszText);
     1249          }
     1250        } else lpItem->pszText = LPSTR_TEXTCALLBACKW;
     1251      }
    14151252      lpItem->cchTextMax = phdi->cchTextMax;
    14161253    } else
     
    14421279    return nItem;
    14431280}
    1444 
    1445 static LRESULT
    1446 HEADER_InsertItemW (HWND hwnd, WPARAM wParam, LPARAM lParam)
    1447 {
    1448     HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd);
    1449     HDITEMW *phdi = (HDITEMW*)lParam;
    1450     INT nItem = (INT)wParam;
    1451     HEADER_ITEM *lpItem;
    1452 
    1453     if ((phdi == NULL) || (nItem < 0)) return -1;
    1454 
    1455     if (nItem > infoPtr->uNumItem) nItem = infoPtr->uNumItem;
    1456 
    1457     if (infoPtr->uNumItem == 0)
    1458     {
    1459       infoPtr->items = (HEADER_ITEM*)COMCTL32_Alloc(sizeof(HEADER_ITEM));
    1460       infoPtr->uNumItem++;
    1461     } else
    1462     {
    1463       HEADER_ITEM *oldItems = infoPtr->items;
    1464 
    1465       infoPtr->uNumItem++;
    1466       infoPtr->items = (HEADER_ITEM*)COMCTL32_Alloc(sizeof(HEADER_ITEM)*infoPtr->uNumItem);
    1467       if (nItem == 0)
    1468         memcpy (&infoPtr->items[1],&oldItems[0],(infoPtr->uNumItem-1)*sizeof(HEADER_ITEM));
    1469       else
    1470       {
    1471         /* pre insert copy */
    1472         memcpy (&infoPtr->items[0],&oldItems[0],nItem*sizeof(HEADER_ITEM));
    1473 
    1474         /* post insert copy */
    1475         if (nItem < infoPtr->uNumItem-1)
    1476           memcpy (&infoPtr->items[nItem+1],&oldItems[nItem],(infoPtr->uNumItem - nItem)*sizeof(HEADER_ITEM));
    1477       }
    1478 
    1479       COMCTL32_Free (oldItems);
    1480     }
    1481 
    1482     lpItem = (HEADER_ITEM*)&infoPtr->items[nItem];
    1483     lpItem->bDown = FALSE;
    1484 
    1485     lpItem->cxy = (phdi->mask & HDI_WIDTH || phdi->mask & HDI_HEIGHT) ? phdi->cxy:0;
    1486 
    1487     if (phdi->mask & HDI_TEXT)
    1488     {
    1489       if (!phdi->pszText) lpItem->pszText = NULL;
    1490       else if (phdi->pszText != LPSTR_TEXTCALLBACKW)
    1491       {
    1492         INT len;
    1493 
    1494         len = lstrlenW(phdi->pszText);
    1495         if (len == 0) lpItem->pszText = NULL; else
    1496         {
    1497           lpItem->pszText = (WCHAR*)COMCTL32_Alloc((len+1)*sizeof(WCHAR));
    1498           lstrcpyW(lpItem->pszText,phdi->pszText);
    1499         }
    1500       } else lpItem->pszText = LPSTR_TEXTCALLBACKW;
    1501       lpItem->cchTextMax = phdi->cchTextMax;
    1502     } else
    1503     {
    1504       lpItem->pszText = NULL;
    1505       lpItem->cchTextMax = 0;
    1506     }
    1507 
    1508     lpItem->fmt = (phdi->mask & HDI_FORMAT) ? phdi->fmt:HDF_LEFT;
    1509     if (lpItem->fmt == 0) lpItem->fmt = HDF_LEFT;
    1510 
    1511     lpItem->lParam = (phdi->mask & HDI_LPARAM) ? phdi->lParam:0;
    1512 
    1513     lpItem->iImage = (phdi->mask & HDI_IMAGE) ? phdi->iImage:0;
    1514 
    1515     lpItem->iOrder = (phdi->mask & HDI_ORDER) ? phdi->iOrder:-1;
    1516 
    1517     lpItem->hbm = (phdi->mask & HDI_BITMAP) ? phdi->hbm:0;
    1518 
    1519     if (phdi->mask & HDI_FILTER)
    1520     {
    1521       lpItem->type = phdi->type;
    1522       lpItem->pvFilter = phdi->pvFilter;
    1523     }
    1524 
    1525     HEADER_SetItemBounds (hwnd,nItem);
    1526     HEADER_Refresh(hwnd);
    1527 
    1528     return nItem;
    1529 }
    1530 
    15311281
    15321282static LRESULT
     
    15721322
    15731323
    1574 static LRESULT
    1575 HEADER_SetItemA (HWND hwnd, WPARAM wParam, LPARAM lParam)
     1324static LRESULT HEADER_SetItem(HWND hwnd,WPARAM wParam,LPARAM lParam,BOOL unicode)
    15761325{
    15771326    HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd);
    1578     HDITEMA *phdi = (HDITEMA*)lParam;
    1579     INT nItem = (INT)wParam;
     1327    HDITEMW     *phdi = (HDITEMW*)lParam;
     1328    INT          nItem = (INT)wParam;
    15801329    HEADER_ITEM *lpItem;
    15811330    HDC hdc;
     
    15851334    if (phdi->mask == 0) return TRUE;
    15861335
    1587 //    TRACE (header, "[nItem=%d]\n", nItem);
    15881336    if (HEADER_SendItemChanging(hwnd,nItem)) return FALSE;
    15891337
     
    16101358    if (phdi->mask & HDI_TEXT)
    16111359    {
    1612       if (phdi->pszText != LPSTR_TEXTCALLBACKA)
    1613       {
    1614         if (lpItem->pszText)
    1615         {
    1616           COMCTL32_Free (lpItem->pszText);
    1617           lpItem->pszText = NULL;
    1618         }
    1619         if (phdi->pszText)
    1620         {
    1621           INT len = lstrlenA (phdi->pszText);
    1622 
    1623           if (len)
     1360      if (unicode)
     1361      {
     1362        if (phdi->pszText != LPSTR_TEXTCALLBACKW)
     1363        {
     1364          if (lpItem->pszText)
    16241365          {
    1625             lpItem->pszText = (WCHAR*)COMCTL32_Alloc((len+1)*sizeof(WCHAR));
    1626             lstrcpyAtoW(lpItem->pszText,phdi->pszText);
     1366            COMCTL32_Free(lpItem->pszText);
     1367            lpItem->pszText = NULL;
    16271368          }
     1369          if (phdi->pszText)
     1370          {
     1371            INT len = lstrlenW(phdi->pszText);
     1372
     1373            if (len)
     1374            {
     1375              lpItem->pszText = (WCHAR*)COMCTL32_Alloc((len+1)*sizeof(WCHAR));
     1376              lstrcpyW(lpItem->pszText,phdi->pszText);
     1377            }
     1378          }
     1379        } else
     1380        {
     1381          if (lpItem->pszText != LPSTR_TEXTCALLBACKW) COMCTL32_Free(lpItem->pszText);
     1382          lpItem->pszText = LPSTR_TEXTCALLBACKW;
    16281383        }
    16291384      } else
    16301385      {
    1631         if (lpItem->pszText != LPSTR_TEXTCALLBACKW) COMCTL32_Free(lpItem->pszText);
    1632         lpItem->pszText = LPSTR_TEXTCALLBACKW;
     1386        if ((LPSTR)phdi->pszText != LPSTR_TEXTCALLBACKA)
     1387        {
     1388          if (lpItem->pszText)
     1389          {
     1390            COMCTL32_Free (lpItem->pszText);
     1391            lpItem->pszText = NULL;
     1392          }
     1393          if (phdi->pszText)
     1394          {
     1395            INT len = lstrlenA((LPSTR)phdi->pszText);
     1396
     1397            if (len)
     1398            {
     1399              lpItem->pszText = (WCHAR*)COMCTL32_Alloc((len+1)*sizeof(WCHAR));
     1400              lstrcpyAtoW(lpItem->pszText,(LPSTR)phdi->pszText);
     1401            }
     1402          }
     1403        } else
     1404        {
     1405          if (lpItem->pszText != LPSTR_TEXTCALLBACKW) COMCTL32_Free(lpItem->pszText);
     1406          lpItem->pszText = LPSTR_TEXTCALLBACKW;
     1407        }
    16331408      }
    16341409    }
     
    16411416    return TRUE;
    16421417}
    1643 
    1644 
    1645 static LRESULT
    1646 HEADER_SetItemW (HWND hwnd, WPARAM wParam, LPARAM lParam)
    1647 {
    1648     HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd);
    1649     HDITEMW *phdi = (HDITEMW*)lParam;
    1650     INT nItem = (INT)wParam;
    1651     HEADER_ITEM *lpItem;
    1652     HDC hdc;
    1653 
    1654     if (phdi == NULL) return FALSE;
    1655     if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem)) return FALSE;
    1656     if (phdi->mask == 0) return TRUE;
    1657 
    1658 //    TRACE (header, "[nItem=%d]\n", nItem);
    1659 
    1660     if (HEADER_SendItemChanging(hwnd,nItem)) return FALSE;
    1661 
    1662     lpItem = (HEADER_ITEM*)&infoPtr->items[nItem];
    1663 
    1664     if (phdi->mask & HDI_BITMAP) lpItem->hbm = phdi->hbm;
    1665 
    1666     if (phdi->mask & HDI_FORMAT) lpItem->fmt = phdi->fmt;
    1667 
    1668     if (phdi->mask & HDI_FILTER)
    1669     {
    1670       lpItem->type = lpItem->type;
    1671       lpItem->pvFilter = lpItem->pvFilter;
    1672     }
    1673 
    1674     if (phdi->mask & (HDI_WIDTH | HDI_WIDTH)) lpItem->cxy = phdi->cxy;
    1675 
    1676     if (phdi->mask & HDI_IMAGE) lpItem->iImage = phdi->iImage;
    1677 
    1678     if (phdi->mask & HDI_LPARAM) lpItem->lParam = phdi->lParam;
    1679 
    1680     if (phdi->mask & HDI_ORDER) lpItem->iOrder = phdi->iOrder;
    1681 
    1682     if (phdi->mask & HDI_TEXT)
    1683     {
    1684       if (phdi->pszText != LPSTR_TEXTCALLBACKW)
    1685       {
    1686         if (lpItem->pszText)
    1687         {
    1688           COMCTL32_Free(lpItem->pszText);
    1689           lpItem->pszText = NULL;
    1690         }
    1691         if (phdi->pszText)
    1692         {
    1693           INT len = lstrlenW(phdi->pszText);
    1694 
    1695           if (len)
    1696           {
    1697             lpItem->pszText = (WCHAR*)COMCTL32_Alloc((len+1)*sizeof(WCHAR));
    1698             lstrcpyW(lpItem->pszText,phdi->pszText);
    1699           }
    1700         }
    1701       } else
    1702       {
    1703         if (lpItem->pszText != LPSTR_TEXTCALLBACKW) COMCTL32_Free(lpItem->pszText);
    1704         lpItem->pszText = LPSTR_TEXTCALLBACKW;
    1705       }
    1706     }
    1707 
    1708     HEADER_SendItemChanged(hwnd,nItem);
    1709 
    1710     HEADER_SetItemBounds(hwnd,0);
    1711     HEADER_Refresh(hwnd);
    1712 
    1713     return TRUE;
    1714 }
    1715 
    1716 static LRESULT
    1717 HEADER_SetUnicodeFormat (HWND hwnd, WPARAM wParam)
    1718 {
    1719     HEADER_INFO *infoPtr = HEADER_GetInfoPtr(hwnd);
    1720     BOOL bTemp = infoPtr->bUnicode;
    1721 
    1722     infoPtr->bUnicode = (BOOL)wParam;
    1723 
    1724     return bTemp;
    1725 }
    1726 
    17271418
    17281419static LRESULT
     
    17341425    HDC   hdc;
    17351426
    1736     infoPtr = (HEADER_INFO *)COMCTL32_Alloc (sizeof(HEADER_INFO));
    1737     SetWindowLongA (hwnd, 0, (DWORD)infoPtr);
     1427    infoPtr = (HEADER_INFO*)initControl(hwnd,sizeof(HEADER_INFO));
    17381428
    17391429    infoPtr->uNumItem = 0;
     
    17531443    infoPtr->iHotItem  = -1;
    17541444    infoPtr->xBmpMargin = 3*GetSystemMetrics(SM_CXEDGE);
    1755     infoPtr->bUnicode = IsWindowUnicode(hwnd);
    1756 
    1757     hdc = GetDC (0);
     1445
     1446    hdc = GetDC (hwnd);
    17581447    hOldFont = SelectObject (hdc, GetStockObject (SYSTEM_FONT));
    17591448    GetTextMetricsA (hdc, &tm);
    17601449    infoPtr->nHeight = tm.tmHeight + VERT_BORDER;
    17611450    SelectObject (hdc, hOldFont);
    1762     ReleaseDC (0, hdc);
     1451    ReleaseDC (hwnd, hdc);
    17631452
    17641453    return 0;
     
    17851474        ImageList_Destroy (infoPtr->himl);
    17861475
    1787     COMCTL32_Free (infoPtr);
     1476    doneControl(hwnd);
    17881477
    17891478    return 0;
     
    19131602        infoPtr->dragImage = NULL;
    19141603
    1915         if (!HEADER_SendDragNotify(hwnd,HDN_ENDDRAG,infoPtr->iMoveItem,0) && infoPtr->iDragItem != infoPtr->iMoveItem && infoPtr->iDragItem != infoPtr->iMoveItem+1 && infoPtr->iDragItem != -1)
     1604        if (!HEADER_SendDragNotify(hwnd,HDN_ENDDRAG,infoPtr->iMoveItem,0) && (infoPtr->iDragItem != infoPtr->iMoveItem) && (infoPtr->iDragItem != infoPtr->iMoveItem+1) && (infoPtr->iDragItem != -1))
    19161605        {
    19171606          HEADER_ITEM tmpItem = infoPtr->items[infoPtr->iMoveItem];;
     
    19871676      infoPtr->bCaptured = FALSE;
    19881677      ReleaseCapture();
    1989       HEADER_SendSimpleNotify(hwnd,NM_RELEASEDCAPTURE);
     1678      sendNotify(hwnd,NM_RELEASEDCAPTURE);
    19901679    }
    19911680
     
    20081697  for (x = 0;x < infoPtr->uNumItem;x++)
    20091698  {
    2010     if (xDrag >= infoPtr->items[x].rect.left && xDrag <= infoPtr->items[x].rect.right) return x;
     1699    if ((xDrag >= infoPtr->items[x].rect.left) && (xDrag <= infoPtr->items[x].rect.right)) return x;
    20111700  }
    20121701
     
    20281717    HEADER_InternalHitTest (hwnd, &pt, &flags, &nItem);
    20291718
    2030     if (dwStyle & HDS_BUTTONS && dwStyle & HDS_HOTTRACK)
     1719    if ((dwStyle & HDS_BUTTONS) && (dwStyle & HDS_HOTTRACK))
    20311720    {
    20321721        INT newItem;
     
    20461735          HEADER_Refresh(hwnd);
    20471736        }
    2048         if (!infoPtr->bTimer && infoPtr->iHotItem != -1)
     1737        if (!infoPtr->bTimer && (infoPtr->iHotItem != -1))
    20491738        {
    20501739          infoPtr->bTimer = TRUE;
    20511740          SetTimer(hwnd,TIMER_ID,TIMER_MS,NULL);
    2052         } else if (infoPtr->bTimer && infoPtr->iHotItem == -1)
     1741        } else if (infoPtr->bTimer && (infoPtr->iHotItem == -1))
    20531742        {
    20541743          KillTimer(hwnd,TIMER_ID);
     
    20611750      if (infoPtr->bPressed)
    20621751      {
    2063         if (dwStyle & HDS_DRAGDROP && infoPtr->uNumItem > 1 && (infoPtr->bDragDrop || !HEADER_SendDragNotify(hwnd,HDN_BEGINDRAG,infoPtr->iMoveItem,0)))
     1752        if ((dwStyle & HDS_DRAGDROP) && (infoPtr->uNumItem > 1) && (infoPtr->bDragDrop || !HEADER_SendDragNotify(hwnd,HDN_BEGINDRAG,infoPtr->iMoveItem,0)))
    20641753        {
    20651754          if (!infoPtr->bDragDrop)
     
    21681857  HDC hdc;
    21691858
    2170   if (wParam == VK_ESCAPE && infoPtr->bCaptured)
     1859  if ((wParam == VK_ESCAPE) && infoPtr->bCaptured)
    21711860  {
    21721861    if (infoPtr->bPressed && infoPtr->bDragDrop)
     
    22011890    infoPtr->bCaptured = FALSE;
    22021891    ReleaseCapture();
    2203     HEADER_SendSimpleNotify(hwnd,NM_RELEASEDCAPTURE);
     1892    sendNotify(hwnd,NM_RELEASEDCAPTURE);
    22041893
    22051894    return TRUE;
     
    22751964HEADER_RButtonUp (HWND hwnd, WPARAM wParam, LPARAM lParam)
    22761965{
    2277   HEADER_SendSimpleNotify(hwnd,NM_RCLICK);
     1966  sendNotify(hwnd,NM_RCLICK);
    22781967
    22791968  return DefWindowProcA(hwnd,WM_RBUTTONUP,wParam,lParam);
     
    23302019    hFont = infoPtr->hFont ? infoPtr->hFont : GetStockObject (SYSTEM_FONT);
    23312020
    2332     hdc = GetDC (0);
     2021    hdc = GetDC (hwnd);
    23332022    hOldFont = SelectObject (hdc, hFont);
    23342023    GetTextMetricsA (hdc, &tm);
    23352024    infoPtr->nHeight = tm.tmHeight + VERT_BORDER;
    23362025    SelectObject (hdc, hOldFont);
    2337     ReleaseDC (0, hdc);
     2026    ReleaseDC (hwnd, hdc);
    23382027
    23392028    if (lParam) HEADER_Refresh(hwnd);
     
    23672056
    23682057        case HDM_GETITEMA:
    2369             return HEADER_GetItemA (hwnd, wParam, lParam);
     2058            return HEADER_GetItem(hwnd,wParam,lParam,FALSE);
    23702059
    23712060        case HDM_GETITEMW:
    2372             return HEADER_GetItemW (hwnd, wParam, lParam);
     2061            return HEADER_GetItem(hwnd,wParam,lParam,TRUE);
    23732062
    23742063        case HDM_GETITEMCOUNT:
     
    23812070            return HEADER_GetOrderArray(hwnd,wParam,lParam);
    23822071
    2383         case HDM_GETUNICODEFORMAT:
    2384             return HEADER_GetUnicodeFormat (hwnd);
    2385 
    23862072        case HDM_HITTEST:
    23872073            return HEADER_HitTest (hwnd, wParam, lParam);
    23882074
    23892075        case HDM_INSERTITEMA:
    2390             return HEADER_InsertItemA (hwnd, wParam, lParam);
     2076            return HEADER_InsertItem(hwnd,wParam,lParam,FALSE);
    23912077
    23922078        case HDM_INSERTITEMW:
    2393             return HEADER_InsertItemW (hwnd, wParam, lParam);
     2079            return HEADER_InsertItem(hwnd,wParam,lParam,TRUE);
    23942080
    23952081        case HDM_LAYOUT:
     
    24122098
    24132099        case HDM_SETITEMA:
    2414             return HEADER_SetItemA (hwnd, wParam, lParam);
     2100            return HEADER_SetItem(hwnd,wParam,lParam,FALSE);
    24152101
    24162102        case HDM_SETITEMW:
    2417             return HEADER_SetItemW (hwnd, wParam, lParam);
     2103            return HEADER_SetItem(hwnd,wParam,lParam,TRUE);
    24182104
    24192105        case HDM_SETORDERARRAY:
    24202106            return HEADER_SetOrderArray(hwnd,wParam,lParam);
    24212107
    2422         case HDM_SETUNICODEFORMAT:
    2423             return HEADER_SetUnicodeFormat (hwnd, wParam);
    2424 
    24252108        case WM_CAPTURECHANGED:
    24262109            return HEADER_CaptureChanged(hwnd,wParam,lParam);
     
    24552138        case WM_MOUSEMOVE:
    24562139            return HEADER_MouseMove (hwnd, wParam, lParam);
    2457 
    2458 /*      case WM_NOTIFYFORMAT: */
    24592140
    24602141        case WM_PAINT:
     
    24802161//              ERR (header, "unknown msg %04x wp=%04x lp=%08lx\n",
    24812162//                   msg, wParam, lParam );
    2482             return DefWindowProcA (hwnd, msg, wParam, lParam);
     2163            return defComCtl32ProcA (hwnd, msg, wParam, lParam);
    24832164    }
    24842165    return 0;
     
    24902171{
    24912172    WNDCLASSA wndClass;
    2492 
    2493 //SvL: Don't check this now
    2494 //    if (GlobalFindAtomA (WC_HEADERA)) return;
    24952173
    24962174    ZeroMemory (&wndClass, sizeof(WNDCLASSA));
     
    25092187HEADER_Unregister (VOID)
    25102188{
    2511     if (GlobalFindAtomA (WC_HEADERA))
    2512         UnregisterClassA (WC_HEADERA, (HINSTANCE)NULL);
    2513 }
    2514 
     2189    UnregisterClassA (WC_HEADERA, (HINSTANCE)NULL);
     2190}
     2191
Note: See TracChangeset for help on using the changeset viewer.