Made button control fully unicode aware.
diff --git a/controls/button.c b/controls/button.c
index 39ab807..9a8ee6d 100644
--- a/controls/button.c
+++ b/controls/button.c
@@ -66,7 +66,7 @@
ReleaseDC( (wndPtr)->hwndSelf, hdc ); }
#define BUTTON_SEND_CTLCOLOR(wndPtr,hdc) \
- SendMessageA( GetParent((wndPtr)->hwndSelf), WM_CTLCOLORBTN, \
+ SendMessageW( GetParent((wndPtr)->hwndSelf), WM_CTLCOLORBTN, \
(hdc), (wndPtr)->hwndSelf )
static HBITMAP hbitmapCheckBoxes = 0;
@@ -111,8 +111,8 @@
if (!hbitmapCheckBoxes)
{
BITMAP bmp;
- hbitmapCheckBoxes = LoadBitmapA(0, MAKEINTRESOURCEA(OBM_CHECKBOXES));
- GetObjectA( hbitmapCheckBoxes, sizeof(bmp), &bmp );
+ hbitmapCheckBoxes = LoadBitmapW(0, MAKEINTRESOURCEW(OBM_CHECKBOXES));
+ GetObjectW( hbitmapCheckBoxes, sizeof(bmp), &bmp );
checkBoxWidth = bmp.bmWidth / 4;
checkBoxHeight = bmp.bmHeight / 3;
}
@@ -141,7 +141,7 @@
case WM_KEYDOWN:
if (wParam == VK_SPACE)
{
- SendMessageA( hWnd, BM_SETSTATE, TRUE, 0 );
+ SendMessageW( hWnd, BM_SETSTATE, TRUE, 0 );
infoPtr->state |= BUTTON_BTNPRESSED;
}
break;
@@ -151,7 +151,7 @@
style==BS_RADIOBUTTON ||
style==BS_USERBUTTON ||
style==BS_OWNERDRAW) {
- SendMessageA( GetParent(hWnd), WM_COMMAND,
+ SendMessageW( GetParent(hWnd), WM_COMMAND,
MAKEWPARAM( wndPtr->wIDmenu, BN_DOUBLECLICKED ), hWnd);
break;
}
@@ -159,7 +159,7 @@
case WM_LBUTTONDOWN:
SetCapture( hWnd );
SetFocus( hWnd );
- SendMessageA( hWnd, BM_SETSTATE, TRUE, 0 );
+ SendMessageW( hWnd, BM_SETSTATE, TRUE, 0 );
infoPtr->state |= BUTTON_BTNPRESSED;
break;
@@ -174,7 +174,7 @@
ReleaseCapture();
break;
}
- SendMessageA( hWnd, BM_SETSTATE, FALSE, 0 );
+ SendMessageW( hWnd, BM_SETSTATE, FALSE, 0 );
ReleaseCapture();
GetClientRect( hWnd, &rect );
if (uMsg == WM_KEYUP || PtInRect( &rect, pt ))
@@ -182,19 +182,19 @@
switch(style)
{
case BS_AUTOCHECKBOX:
- SendMessageA( hWnd, BM_SETCHECK,
+ SendMessageW( hWnd, BM_SETCHECK,
!(infoPtr->state & BUTTON_CHECKED), 0 );
break;
case BS_AUTORADIOBUTTON:
- SendMessageA( hWnd, BM_SETCHECK, TRUE, 0 );
+ SendMessageW( hWnd, BM_SETCHECK, TRUE, 0 );
break;
case BS_AUTO3STATE:
- SendMessageA( hWnd, BM_SETCHECK,
+ SendMessageW( hWnd, BM_SETCHECK,
(infoPtr->state & BUTTON_3STATE) ? 0 :
((infoPtr->state & 3) + 1), 0 );
break;
}
- SendMessageA( GetParent(hWnd), WM_COMMAND,
+ SendMessageW( GetParent(hWnd), WM_COMMAND,
MAKEWPARAM( wndPtr->wIDmenu, BN_CLICKED ), hWnd);
}
break;
@@ -203,7 +203,7 @@
if (infoPtr->state & BUTTON_BTNPRESSED) {
infoPtr->state &= BUTTON_NSTATES;
if (infoPtr->state & BUTTON_HIGHLIGHTED)
- SendMessageA( hWnd, BM_SETSTATE, FALSE, 0 );
+ SendMessageW( hWnd, BM_SETSTATE, FALSE, 0 );
}
break;
@@ -211,19 +211,19 @@
if (GetCapture() == hWnd)
{
GetClientRect( hWnd, &rect );
- SendMessageA( hWnd, BM_SETSTATE, PtInRect(&rect, pt), 0 );
+ SendMessageW( hWnd, BM_SETSTATE, PtInRect(&rect, pt), 0 );
}
break;
case WM_NCHITTEST:
if(style == BS_GROUPBOX) return HTTRANSPARENT;
- return DefWindowProcA( hWnd, uMsg, wParam, lParam );
+ return DefWindowProcW( hWnd, uMsg, wParam, lParam );
case WM_SETTEXT:
- DEFWND_SetTextA( wndPtr, (LPCSTR)lParam );
+ DEFWND_SetTextW( wndPtr, (LPCWSTR)lParam );
if( wndPtr->dwStyle & WS_VISIBLE )
PAINT_BUTTON( wndPtr, style, ODA_DRAWENTIRE );
- return 0;
+ return 1; /* success. FIXME: check text length */
case WM_SETFONT:
infoPtr->hFont = (HFONT16)wParam;
@@ -236,13 +236,13 @@
case WM_SETFOCUS:
if ((style == BS_RADIOBUTTON || style == BS_AUTORADIOBUTTON) && (GetCapture() != hWnd) &&
- !(SendMessageA(hWnd, BM_GETCHECK, 0, 0) & BST_CHECKED))
+ !(SendMessageW(hWnd, BM_GETCHECK, 0, 0) & BST_CHECKED))
{
/* The notification is sent when the button (BS_AUTORADIOBUTTON)
is unchecked and the focus was not given by a mouse click. */
if (style == BS_AUTORADIOBUTTON)
- SendMessageA( hWnd, BM_SETCHECK, BUTTON_CHECKED, 0 );
- SendMessageA( GetParent(hWnd), WM_COMMAND,
+ SendMessageW( hWnd, BM_SETCHECK, BUTTON_CHECKED, 0 );
+ SendMessageW( GetParent(hWnd), WM_COMMAND,
MAKEWPARAM( wndPtr->wIDmenu, BN_CLICKED ), hWnd);
}
infoPtr->state |= BUTTON_HASFOCUS;
@@ -273,8 +273,8 @@
break;
case BM_CLICK:
- SendMessageA( hWnd, WM_LBUTTONDOWN, 0, 0 );
- SendMessageA( hWnd, WM_LBUTTONUP, 0, 0 );
+ SendMessageW( hWnd, WM_LBUTTONDOWN, 0, 0 );
+ SendMessageW( hWnd, WM_LBUTTONUP, 0, 0 );
break;
case BM_SETIMAGE:
@@ -353,7 +353,7 @@
break;
default:
- return DefWindowProcA(hWnd, uMsg, wParam, lParam);
+ return DefWindowProcW(hWnd, uMsg, wParam, lParam);
}
return 0;
}
@@ -476,7 +476,7 @@
if (!GetIconInfo((HICON)infoPtr->hImage, &iconInfo))
goto empty_rect;
- GetObjectA (iconInfo.hbmColor, sizeof(BITMAP), &bm);
+ GetObjectW (iconInfo.hbmColor, sizeof(BITMAP), &bm);
r.right = r.left + bm.bmWidth;
r.bottom = r.top + bm.bmHeight;
@@ -486,7 +486,7 @@
break;
case BS_BITMAP:
- if (!GetObjectA (infoPtr->hImage, sizeof(BITMAP), &bm))
+ if (!GetObjectW (infoPtr->hImage, sizeof(BITMAP), &bm))
goto empty_rect;
r.right = r.left + bm.bmWidth;
@@ -537,7 +537,7 @@
/**********************************************************************
* BUTTON_DrawTextCallback
*
- * Callback function used be DrawStateA function.
+ * Callback function used by DrawStateW function.
*/
static BOOL CALLBACK BUTTON_DrawTextCallback(HDC hdc, LPARAM lp, WPARAM wp, int cx, int cy)
{
@@ -557,8 +557,7 @@
*
* Common function for drawing button label.
*/
-static void BUTTON_DrawLabel(WND *wndPtr, HDC hdc, UINT dtFlags,
- RECT *rc)
+static void BUTTON_DrawLabel(WND *wndPtr, HDC hdc, UINT dtFlags, RECT *rc)
{
BUTTONINFO *infoPtr = (BUTTONINFO *)wndPtr->wExtra;
DRAWSTATEPROC lpOutputProc = NULL;
@@ -885,7 +884,7 @@
tmpWnd = WIN_FindWndPtr(sibling);
if ((wndPtr->hwndSelf != sibling) &&
((tmpWnd->dwStyle & 0x0f) == BS_AUTORADIOBUTTON))
- SendMessageA( sibling, BM_SETCHECK, BUTTON_UNCHECKED, 0 );
+ SendMessageW( sibling, BM_SETCHECK, BUTTON_UNCHECKED, 0 );
sibling = GetNextDlgGroupItem( parent, sibling, FALSE );
WIN_ReleaseWndPtr(tmpWnd);
} while (sibling != start);
@@ -922,10 +921,10 @@
SelectObject( hDC, hPrevBrush );
SelectObject( hDC, hPrevPen );
} else {
- TEXTMETRICA tm;
+ TEXTMETRICW tm;
rcFrame = rc;
- GetTextMetricsA (hDC, &tm);
+ GetTextMetricsW (hDC, &tm);
rcFrame.top += (tm.tmHeight / 2) - 1;
DrawEdge (hDC, &rcFrame, EDGE_ETCHED, BF_RECT |
((wndPtr->dwStyle & BS_FLAT) ? BF_FLAT : 0));
@@ -1010,7 +1009,7 @@
SetBkColor( hDC, GetSysColor( COLOR_BTNFACE ) );
- SendMessageA( GetParent(wndPtr->hwndSelf), WM_DRAWITEM,
+ SendMessageW( GetParent(wndPtr->hwndSelf), WM_DRAWITEM,
wndPtr->wIDmenu, (LPARAM)&dis );
SelectClipRgn(hDC, clipRegion);