last comdlg32 16/32 split

Steven Edwards steven_ed4153 at yahoo.com
Thu Oct 16 19:47:47 CDT 2003


Hello,
Well I have no idea if it works or breaks any thing. I wont be able to
test under ReactOS or WINE for about a week but here it is. If
anyone....such as the people that wrote commdlg for WINE.....care to
comment, this is it. The last splitting of Wine16 calls from
comdlg32.dll. To steal a recent quote from a ReactOS developer, if this
patch or something like it is merged, comdlg32.dll and ReactOS will be
a much better place. We will be able to run notepad, regedit, dependacy
walker and anything else that needs this dll. "The birds will sing, the
sun will shine and the processes will roam free, regardless of age,
gender, religion or operating system."

Yes I am going to clean up the include statements and internal headers
for this dll soon. 

Thanks
Steven

Changelog:
- Win16/32 split of comdlg32
- Create 2 new internal functions and share others to handle Win16


__________________________________
Do you Yahoo!?
The New Yahoo! Shopping - with improved product search
http://shopping.yahoo.com
-------------- next part --------------
Index: commdlg/colordlg.c
===================================================================
RCS file: /home/wine/wine/dlls/commdlg/colordlg.c,v
retrieving revision 1.45
diff -u -r1.45 colordlg.c
--- commdlg/colordlg.c	30 Sep 2003 00:22:33 -0000	1.45
+++ commdlg/colordlg.c	17 Oct 2003 00:32:48 -0000
@@ -69,7 +69,7 @@
 /***********************************************************************
  *                             CC_HSLtoRGB                    [internal]
  */
-static int CC_HSLtoRGB(char c, int hue, int sat, int lum)
+int CC_HSLtoRGB(char c, int hue, int sat, int lum)
 {
  int res = 0, maxrgb;
 
@@ -114,7 +114,7 @@
 /***********************************************************************
  *                             CC_RGBtoHSL                    [internal]
  */
-static int CC_RGBtoHSL(char c, int r, int g, int b)
+int CC_RGBtoHSL(char c, int r, int g, int b)
 {
  WORD maxi, mini, mmsum, mmdif, result = 0;
  int iresult = 0;
@@ -357,7 +357,7 @@
 /***********************************************************************
  *                       CC_CheckDigitsInEdit                 [internal]
  */
-static int CC_CheckDigitsInEdit( HWND hwnd, int maxval )
+int CC_CheckDigitsInEdit( HWND hwnd, int maxval )
 {
  int i, k, m, result, value;
  long editpos;
@@ -399,7 +399,7 @@
 /***********************************************************************
  *                    CC_PaintSelectedColor                   [internal]
  */
-static void CC_PaintSelectedColor( HWND hDlg, COLORREF cr )
+void CC_PaintSelectedColor( HWND hDlg, COLORREF cr )
 {
  RECT rect;
  HDC  hdc;
@@ -430,7 +430,7 @@
 /***********************************************************************
  *                    CC_PaintTriangle                        [internal]
  */
-static void CC_PaintTriangle( HWND hDlg, int y)
+void CC_PaintTriangle( HWND hDlg, int y)
 {
  HDC hDC;
  long temp;
@@ -473,7 +473,7 @@
 /***********************************************************************
  *                    CC_PaintCross                           [internal]
  */
-static void CC_PaintCross( HWND hDlg, int x, int y)
+void CC_PaintCross( HWND hDlg, int x, int y)
 {
  HDC hDC;
  int w = GetDialogBaseUnits();
@@ -623,7 +623,7 @@
 /***********************************************************************
  *                             CC_EditSetRGB                  [internal]
  */
-static void CC_EditSetRGB( HWND hDlg, COLORREF cr )
+void CC_EditSetRGB( HWND hDlg, COLORREF cr )
 {
  char buffer[10];
  LCCPRIV lpp = (LCCPRIV)GetWindowLongA(hDlg, DWL_USER);
@@ -646,7 +646,7 @@
 /***********************************************************************
  *                             CC_EditSetHSL                  [internal]
  */
-static void CC_EditSetHSL( HWND hDlg, int h, int s, int l )
+void CC_EditSetHSL( HWND hDlg, int h, int s, int l )
 {
  char buffer[10];
  LCCPRIV lpp = (LCCPRIV)GetWindowLongA(hDlg, DWL_USER);
@@ -668,7 +668,7 @@
 /***********************************************************************
  *                       CC_SwitchToFullSize                  [internal]
  */
-static void CC_SwitchToFullSize( HWND hDlg, COLORREF result, LPRECT lprect )
+void CC_SwitchToFullSize( HWND hDlg, COLORREF result, LPRECT lprect )
 {
  int i;
  LCCPRIV lpp = (LCCPRIV)GetWindowLongA(hDlg, DWL_USER);
@@ -742,7 +742,7 @@
  *                             CC_PaintUserColorArray         [internal]
  *               Paint the 16 user-selected colors
  */
-static void CC_PaintUserColorArray( HWND hDlg, int rows, int cols, COLORREF* lpcr )
+void CC_PaintUserColorArray( HWND hDlg, int rows, int cols, COLORREF* lpcr )
 {
  HWND hwnd = GetDlgItem(hDlg, 0x2d1);
  RECT rect;
@@ -801,7 +801,7 @@
 /***********************************************************************
  *                              CC_WMInitDialog                  [internal]
  */
-LONG CC_WMInitDialog( HWND hDlg, WPARAM wParam, LPARAM lParam, BOOL b16 )
+LONG CC_WMInitDialog( HWND hDlg, WPARAM wParam, LPARAM lParam )
 {
    int i, res;
    int r, g, b;
@@ -812,37 +812,15 @@
 
    TRACE("WM_INITDIALOG lParam=%08lX\n", lParam);
    lpp = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct CCPRIVATE) );
-   if (b16)
-   {
-       CHOOSECOLORW *ch32;
-       CHOOSECOLOR16 *ch16 = (CHOOSECOLOR16 *) lParam;
-       if (ch16->lStructSize != sizeof(CHOOSECOLOR16) )
-       {
-           HeapFree(GetProcessHeap(), 0, lpp);
-           EndDialog (hDlg, 0) ;
-           return FALSE;
-       }
-       ch32 = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CHOOSECOLORW) );
-       lpp->lpcc = ch32;
-       lpp->lpcc16 = ch16;
-       ch32->lStructSize = sizeof(CHOOSECOLORW);
-       ch32->hwndOwner = HWND_32(ch16->hwndOwner);
-       /* Should be an HINSTANCE but MS made a typo */
-       ch32->hInstance = HWND_32(ch16->hInstance);
-       ch32->lpCustColors = MapSL(ch16->lpCustColors);
-       ch32->lpfnHook = (LPCCHOOKPROC) ch16->lpfnHook; /* only used as flag */
-       ch32->Flags = ch16->Flags;
-   }
-   else
+
+   lpp->lpcc = (LPCHOOSECOLORW) lParam;
+   if (lpp->lpcc->lStructSize != sizeof(CHOOSECOLORW) )
    {
-       lpp->lpcc = (LPCHOOSECOLORW) lParam;
-       if (lpp->lpcc->lStructSize != sizeof(CHOOSECOLORW) )
-       {
-           HeapFree(GetProcessHeap(), 0, lpp);
-           EndDialog (hDlg, 0) ;
-           return FALSE;
-       }
+       HeapFree(GetProcessHeap(), 0, lpp);
+       EndDialog (hDlg, 0) ;
+       return FALSE;
    }
+
    SetWindowLongA(hDlg, DWL_USER, (LONG)lpp);
 
    if (!(lpp->lpcc->Flags & CC_SHOWHELP))
@@ -900,10 +878,6 @@
      SendMessageA( GetDlgItem(hDlg, i), EM_LIMITTEXT, 3, 0);  /* max 3 digits:  xyz  */
    if (CC_HookCallChk(lpp->lpcc))
    {
-      if (b16)
-          res = CallWindowProc16( (WNDPROC16)lpp->lpcc16->lpfnHook,
-				  HWND_16(hDlg), WM_INITDIALOG, wParam, lParam);
-      else
           res = CallWindowProcA( (WNDPROC)lpp->lpcc->lpfnHook, hDlg, WM_INITDIALOG, wParam, lParam);
    }
 
@@ -1034,45 +1008,18 @@
 
 	  case 0x40e:           /* Help! */ /* The Beatles, 1965  ;-) */
 	       i = RegisterWindowMessageA(HELPMSGSTRINGA);
-               if (lpp->lpcc16)
-               {
-                   if (lpp->lpcc->hwndOwner)
-		       SendMessageA(lpp->lpcc->hwndOwner, i, 0, (LPARAM)lpp->lpcc16);
-                   if ( CC_HookCallChk(lpp->lpcc))
-		       CallWindowProc16( (WNDPROC16) lpp->lpcc16->lpfnHook,
-					 HWND_16(hDlg), WM_COMMAND, psh15,
-					 (LPARAM)lpp->lpcc16);
-               }
-               else
-               {
                    if (lpp->lpcc->hwndOwner)
 		       SendMessageA(lpp->lpcc->hwndOwner, i, 0, (LPARAM)lpp->lpcc);
                    if ( CC_HookCallChk(lpp->lpcc))
 		       CallWindowProcA( (WNDPROC) lpp->lpcc->lpfnHook, hDlg,
 		          WM_COMMAND, psh15, (LPARAM)lpp->lpcc);
-               }
 	       break;
 
           case IDOK :
 		cokmsg = RegisterWindowMessageA(COLOROKSTRINGA);
-                if (lpp->lpcc16)
-                {
-		    if (lpp->lpcc->hwndOwner)
-			if (SendMessageA(lpp->lpcc->hwndOwner, cokmsg, 0, (LPARAM)lpp->lpcc16))
-			   break;    /* do NOT close */
-                }
-                else
-                {
 		    if (lpp->lpcc->hwndOwner)
 			if (SendMessageA(lpp->lpcc->hwndOwner, cokmsg, 0, (LPARAM)lpp->lpcc))
-			   break;    /* do NOT close */
-                }
-                if (lpp->lpcc16)
-                {
-                    BYTE *ptr = MapSL(lpp->lpcc16->lpCustColors);
-                    memcpy(ptr, lpp->lpcc->lpCustColors, sizeof(COLORREF)*16);
-                    lpp->lpcc16->rgbResult = lpp->lpcc->rgbResult;
-                }
+			break;    /* do NOT close */
 		EndDialog(hDlg, 1) ;
 		return TRUE ;
 
@@ -1245,7 +1192,7 @@
  switch (message)
 	{
 	  case WM_INITDIALOG:
-	                return CC_WMInitDialog(hDlg, wParam, lParam, FALSE);
+	                return CC_WMInitDialog(hDlg, wParam, lParam);
 	  case WM_NCDESTROY:
 	                DeleteDC(lpp->hdcMem);
 	                DeleteObject(lpp->hbmMem);

Index: commdlg/colordlg.h
===================================================================
RCS file: /home/wine/wine/dlls/commdlg/colordlg.h,v
retrieving revision 1.2
diff -u -r1.2 colordlg.h
--- commdlg/colordlg.h	5 Sep 2003 23:08:42 -0000	1.2
+++ commdlg/colordlg.h	17 Oct 2003 00:32:48 -0000
@@ -70,13 +70,20 @@
  */
 
 BOOL CC_HookCallChk( LPCHOOSECOLORW lpcc );
+int CC_HSLtoRGB(char c, int hue, int sat, int lum);
 int CC_MouseCheckResultWindow( HWND hDlg, LPARAM lParam );
-LONG CC_WMInitDialog( HWND hDlg, WPARAM wParam, LPARAM lParam, BOOL b16 );
+void CC_PaintSelectedColor( HWND hDlg, COLORREF cr );
+int CC_RGBtoHSL(char c, int r, int g, int b);
+void CC_SwitchToFullSize( HWND hDlg, COLORREF result, LPRECT lprect );
 LRESULT CC_WMLButtonDown( HWND hDlg, WPARAM wParam, LPARAM lParam );
 LRESULT CC_WMLButtonUp( HWND hDlg, WPARAM wParam, LPARAM lParam );
-LRESULT CC_WMCommand( HWND hDlg, WPARAM wParam, LPARAM lParam, WORD 
-						notifyCode, HWND hwndCtl );
 LRESULT CC_WMMouseMove( HWND hDlg, LPARAM lParam );
 LRESULT CC_WMPaint( HWND hDlg, WPARAM wParam, LPARAM lParam );
+int CC_CheckDigitsInEdit( HWND hwnd, int maxval );
+void CC_EditSetHSL( HWND hDlg, int h, int s, int l );
+void CC_PaintCross( HWND hDlg, int x, int y);
+void CC_PaintTriangle( HWND hDlg, int y);
+void CC_EditSetRGB( HWND hDlg, COLORREF cr );
+void CC_PaintUserColorArray( HWND hDlg, int rows, int cols, COLORREF* lpcr );
 
Index: commdlg/colordlg16.c
===================================================================
RCS file: /home/wine/wine/dlls/commdlg/colordlg16.c,v
retrieving revision 1.3
diff -u -r1.3 colordlg16.c
--- commdlg/colordlg16.c	10 Sep 2003 03:56:48 -0000	1.3
+++ commdlg/colordlg16.c	17 Oct 2003 00:32:49 -0000
@@ -1,5 +1,5 @@
 /*
- * COMMDLG - Color Dialog
+ * COMMDLG - 16 Bit Color Dialog
  *
  * Copyright 1994 Martin Ayotte
  * Copyright 1996 Albrecht Kleine
@@ -45,6 +45,263 @@
 #include "colordlg.h"
 
 /***********************************************************************
+ *                              CC_WMInitDialog16                  [internal]
+ */
+LONG CC_WMInitDialog16( HWND hDlg, WPARAM wParam, LPARAM lParam )
+{
+   int i, res;
+   int r, g, b;
+   HWND hwnd;
+   RECT rect;
+   POINT point;
+   LCCPRIV lpp;
+
+   TRACE("WM_INITDIALOG lParam=%08lX\n", lParam);
+   lpp = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct CCPRIVATE) );
+
+   CHOOSECOLORW *ch32;
+   CHOOSECOLOR16 *ch16 = (CHOOSECOLOR16 *) lParam;
+   if (ch16->lStructSize != sizeof(CHOOSECOLOR16) )
+   {
+       HeapFree(GetProcessHeap(), 0, lpp);
+       EndDialog (hDlg, 0) ;
+       return FALSE;
+   }
+   ch32 = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CHOOSECOLORW) );
+   lpp->lpcc = ch32;
+   lpp->lpcc16 = ch16;
+   ch32->lStructSize = sizeof(CHOOSECOLORW);
+   ch32->hwndOwner = HWND_32(ch16->hwndOwner);
+   /* Should be an HINSTANCE but MS made a typo */
+   ch32->hInstance = HWND_32(ch16->hInstance);
+   ch32->lpCustColors = MapSL(ch16->lpCustColors);
+   ch32->lpfnHook = (LPCCHOOKPROC) ch16->lpfnHook; /* only used as flag */
+   ch32->Flags = ch16->Flags;
+
+   SetWindowLongA(hDlg, DWL_USER, (LONG)lpp);
+
+   if (!(lpp->lpcc->Flags & CC_SHOWHELP))
+      ShowWindow( GetDlgItem(hDlg,0x40e), SW_HIDE);
+   lpp->msetrgb = RegisterWindowMessageA(SETRGBSTRINGA);
+
+#if 0
+   cpos = MAKELONG(5,7); /* init */
+   if (lpp->lpcc->Flags & CC_RGBINIT)
+   {
+     for (i = 0; i < 6; i++)
+       for (j = 0; j < 8; j++)
+        if (predefcolors[i][j] == lpp->lpcc->rgbResult)
+        {
+          cpos = MAKELONG(i,j);
+          goto found;
+        }
+   }
+   found:
+   /* FIXME: Draw_a_focus_rect & set_init_values */
+#endif
+
+   GetWindowRect(hDlg, &lpp->fullsize);
+   if (lpp->lpcc->Flags & CC_FULLOPEN || lpp->lpcc->Flags & CC_PREVENTFULLOPEN)
+   {
+      hwnd = GetDlgItem(hDlg, 0x2cf);
+      EnableWindow(hwnd, FALSE);
+   }
+   if (!(lpp->lpcc->Flags & CC_FULLOPEN ) || lpp->lpcc->Flags & CC_PREVENTFULLOPEN)
+   {
+      rect = lpp->fullsize;
+      res = rect.bottom - rect.top;
+      hwnd = GetDlgItem(hDlg, 0x2c6); /* cut at left border */
+      point.x = point.y = 0;
+      ClientToScreen(hwnd, &point);
+      ScreenToClient(hDlg,&point);
+      GetClientRect(hDlg, &rect);
+      point.x += GetSystemMetrics(SM_CXDLGFRAME);
+      SetWindowPos(hDlg, 0, 0, 0, point.x, res, SWP_NOMOVE|SWP_NOZORDER);
+
+      for (i = 0x2bf; i < 0x2c5; i++)
+         ShowWindow( GetDlgItem(hDlg, i), SW_HIDE);
+      for (i = 0x2d3; i < 0x2d9; i++)
+         ShowWindow( GetDlgItem(hDlg, i), SW_HIDE);
+      ShowWindow( GetDlgItem(hDlg, 0x2c9), SW_HIDE);
+      ShowWindow( GetDlgItem(hDlg, 0x2c8), SW_HIDE);
+      ShowWindow( GetDlgItem(hDlg, 0x2c6), SW_HIDE);
+      ShowWindow( GetDlgItem(hDlg, 0x2c5), SW_HIDE);
+      ShowWindow( GetDlgItem(hDlg, 1090 ), SW_HIDE);
+   }
+   else
+      CC_SwitchToFullSize(hDlg, lpp->lpcc->rgbResult, NULL);
+   res = TRUE;
+   for (i = 0x2bf; i < 0x2c5; i++)
+     SendMessageA( GetDlgItem(hDlg, i), EM_LIMITTEXT, 3, 0);  /* max 3 digits:  xyz  */
+   if (CC_HookCallChk(lpp->lpcc))
+   {
+          res = CallWindowProc16( (WNDPROC16)lpp->lpcc16->lpfnHook,
+				  HWND_16(hDlg), WM_INITDIALOG, wParam, lParam);
+   }
+
+   /* Set the initial values of the color chooser dialog */
+   r = GetRValue(lpp->lpcc->rgbResult);
+   g = GetGValue(lpp->lpcc->rgbResult);
+   b = GetBValue(lpp->lpcc->rgbResult);
+
+   CC_PaintSelectedColor(hDlg, lpp->lpcc->rgbResult);
+   lpp->h = CC_RGBtoHSL('H', r, g, b);
+   lpp->s = CC_RGBtoHSL('S', r, g, b);
+   lpp->l = CC_RGBtoHSL('L', r, g, b);
+
+   /* Doing it the long way because CC_EditSetRGB/HSL doesn't seem to work */
+   SetDlgItemInt(hDlg, 703, lpp->h, TRUE);
+   SetDlgItemInt(hDlg, 704, lpp->s, TRUE);
+   SetDlgItemInt(hDlg, 705, lpp->l, TRUE);
+   SetDlgItemInt(hDlg, 706, r, TRUE);
+   SetDlgItemInt(hDlg, 707, g, TRUE);
+   SetDlgItemInt(hDlg, 708, b, TRUE);
+
+   CC_PaintCross(hDlg, lpp->h, lpp->s);
+   CC_PaintTriangle(hDlg, lpp->l);
+
+   return res;
+}
+
+/***********************************************************************
+ *                              CC_WMCommand16                  [internal]
+ */
+LRESULT CC_WMCommand16( HWND hDlg, WPARAM wParam, LPARAM lParam, WORD notifyCode, HWND hwndCtl )
+{
+    int  r, g, b, i, xx;
+    UINT cokmsg;
+    HDC hdc;
+    COLORREF *cr;
+    LCCPRIV lpp = (LCCPRIV)GetWindowLongA(hDlg, DWL_USER);
+    TRACE("CC_WMCommand wParam=%x lParam=%lx\n", wParam, lParam);
+    switch (wParam)
+    {
+          case 0x2c2:  /* edit notify RGB */
+	  case 0x2c3:
+	  case 0x2c4:
+	       if (notifyCode == EN_UPDATE && !lpp->updating)
+			 {
+			   i = CC_CheckDigitsInEdit(hwndCtl, 255);
+			   r = GetRValue(lpp->lpcc->rgbResult);
+			   g = GetGValue(lpp->lpcc->rgbResult);
+			   b= GetBValue(lpp->lpcc->rgbResult);
+			   xx = 0;
+			   switch (wParam)
+			   {
+			    case 0x2c2: if ((xx = (i != r))) r = i; break;
+			    case 0x2c3: if ((xx = (i != g))) g = i; break;
+			    case 0x2c4: if ((xx = (i != b))) b = i; break;
+			   }
+			   if (xx) /* something has changed */
+			   {
+			    lpp->lpcc->rgbResult = RGB(r, g, b);
+			    CC_PaintSelectedColor(hDlg, lpp->lpcc->rgbResult);
+			    lpp->h = CC_RGBtoHSL('H', r, g, b);
+			    lpp->s = CC_RGBtoHSL('S', r, g, b);
+			    lpp->l = CC_RGBtoHSL('L', r, g, b);
+			    CC_EditSetHSL(hDlg, lpp->h, lpp->s, lpp->l);
+			    CC_PaintCross(hDlg, lpp->h, lpp->s);
+			    CC_PaintTriangle(hDlg, lpp->l);
+			   }
+			 }
+		 break;
+
+	  case 0x2bf:  /* edit notify HSL */
+	  case 0x2c0:
+	  case 0x2c1:
+	       if (notifyCode == EN_UPDATE && !lpp->updating)
+			 {
+			   i = CC_CheckDigitsInEdit(hwndCtl , wParam == 0x2bf ? 239:240);
+			   xx = 0;
+			   switch (wParam)
+			   {
+			    case 0x2bf: if ((xx = ( i != lpp->h))) lpp->h = i; break;
+			    case 0x2c0: if ((xx = ( i != lpp->s))) lpp->s = i; break;
+			    case 0x2c1: if ((xx = ( i != lpp->l))) lpp->l = i; break;
+			   }
+			   if (xx) /* something has changed */
+			   {
+			    r = CC_HSLtoRGB('R', lpp->h, lpp->s, lpp->l);
+			    g = CC_HSLtoRGB('G', lpp->h, lpp->s, lpp->l);
+			    b = CC_HSLtoRGB('B', lpp->h, lpp->s, lpp->l);
+			    lpp->lpcc->rgbResult = RGB(r, g, b);
+			    CC_PaintSelectedColor(hDlg, lpp->lpcc->rgbResult);
+			    CC_EditSetRGB(hDlg, lpp->lpcc->rgbResult);
+			    CC_PaintCross(hDlg, lpp->h, lpp->s);
+			    CC_PaintTriangle(hDlg, lpp->l);
+			   }
+			 }
+	       break;
+
+          case 0x2cf:
+               CC_SwitchToFullSize(hDlg, lpp->lpcc->rgbResult, &lpp->fullsize);
+	       SetFocus( GetDlgItem(hDlg, 0x2bf));
+	       break;
+
+          case 0x2c8:    /* add colors ... column by column */
+               cr = lpp->lpcc->lpCustColors;
+               cr[(lpp->nextuserdef % 2) * 8 + lpp->nextuserdef / 2] = lpp->lpcc->rgbResult;
+               if (++lpp->nextuserdef == 16)
+		   lpp->nextuserdef = 0;
+	       CC_PaintUserColorArray(hDlg, 2, 8, lpp->lpcc->lpCustColors);
+	       break;
+
+          case 0x2c9:              /* resulting color */
+	       hdc = GetDC(hDlg);
+	       lpp->lpcc->rgbResult = GetNearestColor(hdc, lpp->lpcc->rgbResult);
+	       ReleaseDC(hDlg, hdc);
+	       CC_EditSetRGB(hDlg, lpp->lpcc->rgbResult);
+	       CC_PaintSelectedColor(hDlg, lpp->lpcc->rgbResult);
+	       r = GetRValue(lpp->lpcc->rgbResult);
+	       g = GetGValue(lpp->lpcc->rgbResult);
+	       b = GetBValue(lpp->lpcc->rgbResult);
+	       lpp->h = CC_RGBtoHSL('H', r, g, b);
+	       lpp->s = CC_RGBtoHSL('S', r, g, b);
+	       lpp->l = CC_RGBtoHSL('L', r, g, b);
+	       CC_EditSetHSL(hDlg, lpp->h, lpp->s, lpp->l);
+	       CC_PaintCross(hDlg, lpp->h, lpp->s);
+	       CC_PaintTriangle(hDlg, lpp->l);
+	       break;
+
+	  case 0x40e:           /* Help! */ /* The Beatles, 1965  ;-) */
+	       i = RegisterWindowMessageA(HELPMSGSTRINGA);
+               if (lpp->lpcc16)
+               {
+                   if (lpp->lpcc->hwndOwner)
+		       SendMessageA(lpp->lpcc->hwndOwner, i, 0, (LPARAM)lpp->lpcc16);
+                   if ( CC_HookCallChk(lpp->lpcc))
+		       CallWindowProc16( (WNDPROC16) lpp->lpcc16->lpfnHook,
+					 HWND_16(hDlg), WM_COMMAND, psh15,
+					 (LPARAM)lpp->lpcc16);
+               }
+	       break;
+
+          case IDOK :
+		cokmsg = RegisterWindowMessageA(COLOROKSTRINGA);
+                if (lpp->lpcc16)
+                {
+		    if (lpp->lpcc->hwndOwner)
+			if (SendMessageA(lpp->lpcc->hwndOwner, cokmsg, 0, (LPARAM)lpp->lpcc16))
+			   break;    /* do NOT close */
+                }
+                if (lpp->lpcc16)
+                {
+                    BYTE *ptr = MapSL(lpp->lpcc16->lpCustColors);
+                    memcpy(ptr, lpp->lpcc->lpCustColors, sizeof(COLORREF)*16);
+                    lpp->lpcc16->rgbResult = lpp->lpcc->rgbResult;
+                }
+		EndDialog(hDlg, 1) ;
+		return TRUE ;
+
+	  case IDCANCEL :
+		EndDialog(hDlg, 0) ;
+		return TRUE ;
+
+       }
+       return FALSE;
+}
+
+/***********************************************************************
  *           ColorDlgProc   (COMMDLG.8)
  */
 BOOL16 CALLBACK ColorDlgProc16( HWND16 hDlg16, UINT16 message,
@@ -73,7 +330,7 @@
     switch (message)
     {
 	  case WM_INITDIALOG:
-	                return CC_WMInitDialog(hDlg, wParam, lParam, TRUE);
+	                return CC_WMInitDialog16(hDlg, wParam, lParam);
 	  case WM_NCDESTROY:
 	                DeleteDC(lpp->hdcMem);
 	                DeleteObject(lpp->hbmMem);
@@ -82,7 +339,7 @@
 	                SetWindowLongA(hDlg, DWL_USER, 0L); /* we don't need it anymore */
 	                break;
 	  case WM_COMMAND:
-	                if (CC_WMCommand(hDlg, wParam, lParam,
+	                if (CC_WMCommand16(hDlg, wParam, lParam,
 					 HIWORD(lParam), HWND_32(LOWORD(lParam))))
 	                   return TRUE;
 	                break;


More information about the wine-patches mailing list