Work around apparent limitation to smartphone/ppc, that ownerdraw

buttons don't generate WM_MESSAGE events and ownerdraw static controls
don't get drawn: have one disabled ownerdraw button as the color
sample and a real button to trigger the edit.
This commit is contained in:
ehouse 2008-05-10 18:41:16 +00:00
parent e178b7ccf5
commit 3d6f26cc3d
3 changed files with 75 additions and 65 deletions

View file

@ -275,8 +275,8 @@ typedef struct ColorsDlgState {
XP_Bool inited;
} ColorsDlgState;
#define FIRST_BUTTON DLBLTR_BUTTON
#define LAST_BUTTON PLAYER4_BUTTON
#define FIRST_BUTTON DLBLTR_SAMPLE
#define LAST_BUTTON PLAYER4_SAMPLE
static void
initColorData( ColorsDlgState* cState )
@ -287,9 +287,11 @@ initColorData( ColorsDlgState* cState )
for ( i = 0; i < CE_NUM_EDITABLE_COLORS; ++i ) {
COLORREF ref = cState->inColors[i];
HWND button = GetDlgItem( cState->hDlg, FIRST_BUTTON + i );
cState->colors[i] = ref;
cState->brushes[i] = CreateSolidBrush( ref );
cState->buttons[i] = GetDlgItem( cState->hDlg, FIRST_BUTTON + i );
cState->buttons[i] = button;
EnableWindow( button, FALSE );
}
} /* initColorData */
@ -375,16 +377,9 @@ ceDrawColorButton( ColorsDlgState* cState, DRAWITEMSTRUCT* dis )
XP_ASSERT( !!brush );
RECT rect = dis->rcItem;
XP_Bool hasFocus = ((dis->itemAction & ODA_FOCUS) != 0)
&& ((dis->itemState & ODS_FOCUS) != 0);
Rectangle( dis->hDC, rect.left, rect.top, rect.right, rect.bottom );
InsetRect( &rect, 1, 1 );
if ( hasFocus ) {
Rectangle( dis->hDC, rect.left, rect.top, rect.right, rect.bottom );
(void)SendMessage( cState->hDlg, DM_SETDEFID, dis->CtlID, 0 );
}
InsetRect( &rect, 1, 1 );
FillRect( dis->hDC, &rect, brush );
} /* ceDrawColorButton */
@ -415,8 +410,8 @@ ColorsDlg( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
state->inited = XP_TRUE;
}
/* XP_LOGF( "%s: event=%s (%d); wParam=0x%x; lParam=0x%lx", */
/* __func__, messageToStr(message), message, */
/* XP_LOGF( "%s: event=%s (%d); wParam=0x%x; lParam=0x%lx", */
/* __func__, messageToStr(message), message, */
/* wParam, lParam ); */
switch (message) {
@ -425,11 +420,7 @@ ColorsDlg( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
ceDoDlgScroll( state->globals, hDlg, wParam );
break;
case WM_DRAWITEM: /* passed when button has BS_OWNERDRAW style */
ceDoDlgFocusScroll( state->globals, hDlg,
/* Fake out ceDoDlgFocusScroll, passing ctrl itself */
(WPARAM)((DRAWITEMSTRUCT*)lParam)->hwndItem,
(LPARAM)TRUE );
case WM_DRAWITEM:
ceDrawColorButton( state, (DRAWITEMSTRUCT*)lParam );
result = TRUE;
break;

View file

@ -114,64 +114,76 @@
#define PLAYER3_LABEL 1078
#define PLAYER4_LABEL 1079
#define DLBLTR_SAMPLE 1080
#define DBLWRD_SAMPLE 1081
#define TPLLTR_SAMPLE 1082
#define TPLWRD_SAMPLE 1083
#define EMPCELL_SAMPLE 1084
#define TBACK_SAMPLE 1085
#define FOCUSCLR_SAMPLE 1086
#define PLAYER1_SAMPLE 1087
#define PLAYER2_SAMPLE 1088
#define PLAYER3_SAMPLE 1089
#define PLAYER4_SAMPLE 1090
#define CLRSEL_LABEL_OFFSET (DLBLTR_LABEL-DLBLTR_BUTTON)
/* editor dlg: assumption is that the edit field's ID is one more
than the corresponding slider's */
#ifdef MY_COLOR_SEL
# define CLREDT_SLIDER1 1080
# define RED_EDIT 1081
# define CLREDT_SLIDER2 1082
# define GREEN_EDIT 1083
# define CLREDT_SLIDER3 1084
# define BLUE_EDIT 1085
# define CLREDT_SLIDER1 1091
# define RED_EDIT 1092
# define CLREDT_SLIDER2 1093
# define GREEN_EDIT 1094
# define CLREDT_SLIDER3 1095
# define BLUE_EDIT 1096
# define RED_LABEL 1086
# define GREEN_LABEL 1087
# define BLUE_LABEL 1088
# define RED_LABEL 1097
# define GREEN_LABEL 1098
# define BLUE_LABEL 1099
#endif // MY_COLOR_SEL
#define HC_MIN_COMBO 1089
#define HC_MAX_COMBO 1090
#define HC_MIN_COMBO 1100
#define HC_MAX_COMBO 1101
#define IDC_CCONVIA_LAB 1091
#define IDC_CCONVIA_LAB 1102
#define IDC_COOKIE_LAB 1092
#define IDC_COOKIE_LAB 1103
#ifdef XWFEATURE_RELAY
# define IDC_CRELAYNAME_LAB 1093
# define IDC_CRELAYPORT_LAB 1094
# define IDC_CRELAYHINT_LAB 1095
# define IDC_CRELAYNAME_LAB 1104
# define IDC_CRELAYPORT_LAB 1105
# define IDC_CRELAYHINT_LAB 1106
# define IDC_CONNECTCOMBO 1096
# define RELAYNAME_EDIT 1097
# define RELAYPORT_EDIT 1098
# define COOKIE_EDIT 1099
# define IDC_CONNECTCOMBO 1107
# define RELAYNAME_EDIT 1108
# define RELAYPORT_EDIT 1109
# define COOKIE_EDIT 1110
#endif
#define IDC_BLUET_ADDR_LAB 1100
#define IDC_BLUET_ADDR_LAB 1111
#ifdef XWFEATURE_BLUETOOTH
# define IDC_BLUET_ADDR_EDIT 1101
# define IDC_BLUET_ADDR_BROWSE 1102
# define IDC_BLUET_ADDR_EDIT 1112
# define IDC_BLUET_ADDR_BROWSE 1113
#endif
#define IDS_UPDOWN 1103
#define IDC_NPLAYERSUPDOWN 1104
#define IDC_PHONIESUPDOWN 1105
#define IDC_SVGM_UPDOWN 1106
#define IDS_UPDOWN 1114
#define IDC_NPLAYERSUPDOWN 1115
#define IDC_PHONIESUPDOWN 1116
#define IDC_SVGM_UPDOWN 1117
#define IDC_SVGM_SELLAB 1109
#define IDC_SVGM_GAMELIST 1110
#define IDC_SVGM_SELLAB 1118
#define IDC_SVGM_GAMELIST 1119
/* Let's remove these until they're implemented */
/* #define IDC_SVGM_EDITLAB 1111 */
/* #define IDC_SVGM_CHANGE 1112 */
/* #define IDC_SVGM_EDIT 1113 */
/* #define IDC_SVGM_DUP 1114 */
/* #define IDC_SVGM_DEL 1115 */
#define IDC_SVGM_OPEN 1116
#define IDC_SVGM_OPEN 1120
#define IDC_SVGN_SELLAB 1117
#define IDC_SVGN_EDIT 1118
#define IDC_SVGN_SELLAB 1121
#define IDC_SVGN_EDIT 1122
#define ID_FILE_EXIT 40002
@ -228,7 +240,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 125
#define _APS_NEXT_COMMAND_VALUE 40029
#define _APS_NEXT_CONTROL_VALUE 1087
#define _APS_NEXT_CONTROL_VALUE 1123
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View file

@ -622,7 +622,8 @@ END
#define CLR_WIDTH 114
#define CLR_OK_LEFT ((CLR_WIDTH/2)-10-REPOS_BUTTON_WIDTH)
#define CLR_CANCEL_LEFT ((CLR_WIDTH/2)+10)
#define CLR_LAB_WIDTH 50
#define CLR_LAB_WIDTH 45
#define CLR_SAMPLE_WIDTH 12
#define CLR_LAB_HT 12
#define CLR_BUT_WIDTH 12
#define CLR_BUT_HT 10
@ -657,9 +658,15 @@ END
#define COLOR_BUTTON(txt,id,xx,yy) \
LTEXT txt,id,xx,yy,CLR_LAB_WIDTH,CLR_LAB_HT
#define COLOR_SAMPLE(id,xx,yy) \
PUSHBUTTON "",id,xx,yy,CLR_BUT_WIDTH,CLR_BUT_HT, \
BS_OWNERDRAW
/* Hack alert. Smartphone isn't delivering WM_COMMAND events for
clicks on BS_OWNERDRAW buttons, and WinMo (PPC and Smartphone)
won't deliver WM_DRAWITEM events for SS_OWNERDRAW static
controls. The solution: use an OWNERDRAW button as the color
sample (must disable it in code; WS_DISABLED doesn't work here)
and have a separate button to trigger the edit dialog. */
#define COLOR_SAMPLE(id1,id2,xx,yy) \
PUSHBUTTON "",id2,xx,yy,CLR_BUT_WIDTH,CLR_BUT_HT,BS_OWNERDRAW \
PUSHBUTTON "Edit",id1,xx+CLR_SAMPLE_WIDTH+4,yy,20,CLR_BUT_HT
IDD_COLORSDLG DIALOG DISCARDABLE 0, 20, CLR_WIDTH, COLORSDLG_HT
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | DS_CENTER | WS_VSCROLL
@ -667,29 +674,29 @@ CAPTION "Color preferences"
FONT 8, "System"
BEGIN
COLOR_BUTTON("Double letter:",DLBLTR_LABEL,CLR_COL_1,CLR_ROW_1)
COLOR_SAMPLE(DLBLTR_BUTTON,CLR_COL_2,CLR_ROW_1)
COLOR_SAMPLE(DLBLTR_BUTTON,DLBLTR_SAMPLE,CLR_COL_2,CLR_ROW_1)
COLOR_BUTTON("Double word:",DBLWRD_LABEL,CLR_COL_1,CLR_ROW_2 )
COLOR_SAMPLE(DBLWRD_BUTTON,CLR_COL_2,CLR_ROW_2)
COLOR_SAMPLE(DBLWRD_BUTTON,DBLWRD_SAMPLE,CLR_COL_2,CLR_ROW_2)
COLOR_BUTTON("Triple letter:",TPLLTR_LABEL,CLR_COL_1,CLR_ROW_3 )
COLOR_SAMPLE(TPLLTR_BUTTON,CLR_COL_2,CLR_ROW_3)
COLOR_SAMPLE(TPLLTR_BUTTON,TPLLTR_SAMPLE,CLR_COL_2,CLR_ROW_3)
COLOR_BUTTON("Triple word:",TPLWRD_LABEL,CLR_COL_3,CLR_ROW_4)
COLOR_SAMPLE(TPLWRD_BUTTON,CLR_COL_4,CLR_ROW_4)
COLOR_SAMPLE(TPLWRD_BUTTON,TPLWRD_SAMPLE,CLR_COL_4,CLR_ROW_4)
COLOR_BUTTON("Empty cell:",EMPCELL_LABEL,CLR_COL_1,CLR_ROW_5)
COLOR_SAMPLE(EMPCELL_BUTTON,CLR_COL_2,CLR_ROW_5)
COLOR_SAMPLE(EMPCELL_BUTTON,EMPCELL_SAMPLE,CLR_COL_2,CLR_ROW_5)
COLOR_BUTTON("Tile back:",TBACK_LABEL,CLR_COL_3,CLR_ROW_6)
COLOR_SAMPLE(TBACK_BUTTON,CLR_COL_4,CLR_ROW_6)
COLOR_SAMPLE(TBACK_BUTTON,TBACK_SAMPLE,CLR_COL_4,CLR_ROW_6)
COLOR_BUTTON("Focus color:",FOCUSCLR_LABEL,CLR_COL_1,CLR_ROW_7)
COLOR_SAMPLE(FOCUSCLR_BUTTON,CLR_COL_2,CLR_ROW_7)
COLOR_SAMPLE(FOCUSCLR_BUTTON,FOCUSCLR_SAMPLE,CLR_COL_2,CLR_ROW_7)
COLOR_BUTTON("Player 1:",PLAYER1_LABEL,CLR_COL_1,CLR_ROW_8)
COLOR_SAMPLE(PLAYER1_BUTTON,CLR_COL_2,CLR_ROW_8)
COLOR_SAMPLE(PLAYER1_BUTTON,PLAYER1_SAMPLE,CLR_COL_2,CLR_ROW_8)
COLOR_BUTTON("Player 2:",PLAYER2_LABEL,CLR_COL_3,CLR_ROW_9)
COLOR_SAMPLE(PLAYER2_BUTTON,CLR_COL_4,CLR_ROW_9)
COLOR_SAMPLE(PLAYER2_BUTTON,PLAYER2_SAMPLE,CLR_COL_4,CLR_ROW_9)
COLOR_BUTTON("Player 3:",PLAYER3_LABEL,CLR_COL_1,CLR_ROW_10)
COLOR_SAMPLE(PLAYER3_BUTTON,CLR_COL_2,CLR_ROW_10)
COLOR_SAMPLE(PLAYER3_BUTTON,PLAYER3_SAMPLE,CLR_COL_2,CLR_ROW_10)
COLOR_BUTTON("Player 4:",PLAYER4_LABEL,CLR_COL_3,CLR_ROW_11)
COLOR_SAMPLE(PLAYER4_BUTTON,CLR_COL_4,CLR_ROW_11)
COLOR_SAMPLE(PLAYER4_BUTTON,PLAYER4_SAMPLE,CLR_COL_4,CLR_ROW_11)
#ifndef _WIN32_WCE
DEFPUSHBUTTON "OK",IDOK,CLR_OK_LEFT,CLR_BUTTON_ROW,