Here is a small sample code with this problem. This test program was written with help of OS/2 ToolKit 4.5 samples. (Samples\PM\Controls)/************************************* * File Name : STYLE.H **************************************/ #define IDD_MSGBOX 1001 #define IDS_BLUE 50 #define IDS_RED 51 #define IDS_PINK 52 #define IDS_GREEN 53 #define IDS_CYAN 54 #define IDS_YELLOW 55 #define IDS_DARKGRAY 56 #define IDS_DARKBLUE 57 #define IDS_DARKRED 58 #define IDS_DARKPINK 59 #define IDS_DARKGREEN 60 #define IDS_DARKCYAN 61 #define IDS_BROWN 62 #define IDS_PALEGRAY 63 #define IDS_DEFAULT 64 #define IDS_WARNING 65 #define IDS_FIRSTCOLOR IDS_BLUE #define IDMSG_CANNOTLOADSTRING 11 #define IDMSG_CANNOTSETPP 26 #define IDD_PPDEMODLG 10007 #define IDC_EXIT 2 #define IDC_FORECOLORLIST 119 #define IDC_BACKCOLORLIST 120 #define IDC_SAMPLETEXT 322 #define IDC_START_TIMER 422 #define IDC_STOP_TIMER 423 #define IDC_DELAY_TIMER 424 /********************************** * File Name : STYLE.CPP ***********************************/ #define INCL_WIN #include <os2.h> #include <string.h> #include "style.h" #define MESSAGELEN 100 #define COLORNAMELEN 20 #define NUMCOLORS 15 #define TIMER_DELAY 250UL #define CONTROLS_COUNT 24 static ULONG ulTimerId = 0; static LONG DelayTimer = TIMER_DELAY; static CHAR apszPresParamColor[NUMCOLORS][COLORNAMELEN]; static ULONG aulColor[NUMCOLORS-1] = { CLR_BLUE, CLR_RED, CLR_PINK, CLR_GREEN, CLR_CYAN, CLR_YELLOW, CLR_DARKGRAY, CLR_DARKBLUE, CLR_DARKRED, CLR_DARKPINK, CLR_DARKGREEN, CLR_DARKCYAN, CLR_BROWN, CLR_PALEGRAY }; HAB hab; HMQ hmq; QMSG qmsg; HWND hwndMain; SHORT MessageBox(HWND hwndOwner, SHORT idMsg, SHORT fsStyle, BOOL fBeep); BOOL InitPresParamDemoDlg(HWND hwnd); BOOL UpdatePresParamDemoDlg(HWND hwnd); MRESULT EXPENTRY PresParamDemoDlgProc(HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2); void main(int argc, char* argv[]) { if(!(hab = WinInitialize(0))) { WinAlarm(HWND_DESKTOP, WA_ERROR); return; } if(!(hmq = WinCreateMsgQueue(hab, 256))) { WinAlarm(HWND_DESKTOP, WA_ERROR); WinTerminate(hab); return; } WinDlgBox(HWND_DESKTOP, HWND_DESKTOP, (PFNWP)PresParamDemoDlgProc, NULLHANDLE, IDD_PPDEMODLG, (PVOID)NULL); WinDestroyMsgQueue(hmq); WinTerminate(hab); } /*****************************************************************/ MRESULT EXPENTRY PresParamDemoDlgProc( HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2) { switch(msg) { case WM_INITDLG: hwndMain = hwnd; if (!InitPresParamDemoDlg(hwnd)) WinPostMsg(hwnd, WM_CLOSE, NULL, NULL); else WinEnableControl(hwnd, IDC_STOP_TIMER, FALSE); return (MRESULT)FALSE; case WM_TIMER: WinStopTimer(hab, hwnd, ulTimerId); UpdatePresParamDemoDlg(hwnd); WinSendDlgItemMsg(hwnd, IDC_DELAY_TIMER, SPBM_QUERYVALUE, (MPARAM)&DelayTimer, MPFROM2SHORT(0, SPBQ_UPDATEIFVALID)); ulTimerId = WinStartTimer(hab, hwnd, 1, DelayTimer); break; case WM_COMMAND: switch(SHORT1FROMMP(mp1)) { case IDC_EXIT: WinPostMsg(hwnd, WM_CLOSE, NULL, NULL); break; case IDC_START_TIMER: WinSendDlgItemMsg(hwnd, IDC_DELAY_TIMER, SPBM_QUERYVALUE, (MPARAM)&DelayTimer, MPFROM2SHORT(0, SPBQ_UPDATEIFVALID)); ulTimerId = WinStartTimer(hab, hwnd, 1, DelayTimer); WinEnableControl(hwnd, IDC_STOP_TIMER, TRUE); WinEnableControl(hwnd, IDC_START_TIMER, FALSE); WinEnableControl(hwnd, IDC_DELAY_TIMER, FALSE); break; case IDC_STOP_TIMER: WinStopTimer(hab, hwnd, ulTimerId); ulTimerId = 0; WinEnableControl(hwnd, IDC_DELAY_TIMER, TRUE); WinEnableControl(hwnd, IDC_START_TIMER, TRUE); WinEnableControl(hwnd, IDC_STOP_TIMER, FALSE); break; default: break; } break; case WM_CLOSE: if (ulTimerId != 0) WinStopTimer(hab, hwnd, ulTimerId); WinPostMsg(hwnd, WM_QUIT, NULL, NULL); break; default: return(WinDefDlgProc(hwnd, msg, mp1, mp2)); } return (MRESULT)0; } /*********************************************************************/ BOOL InitPresParamDemoDlg(HWND hwnd) { HWND hwndTemp; ULONG ulCounter; MRESULT mresult; for (ulCounter = 0; ulCounter < NUMCOLORS; ulCounter++) { if (!WinLoadString(hab, (HMODULE)0, (ulCounter + IDS_FIRSTCOLOR), COLORNAMELEN, (PSZ)apszPresParamColor[ulCounter])) { MessageBox(hwndMain, IDMSG_CANNOTLOADSTRING, MB_OK | MB_ERROR, FALSE); return FALSE; } } hwndTemp = WinWindowFromID(hwnd, IDC_FORECOLORLIST); for(ulCounter = 0; ulCounter < NUMCOLORS; ulCounter++) { mresult = WinSendMsg(hwndTemp, LM_INSERTITEM, MPFROMSHORT(LIT_SORTASCENDING), MPFROMP((PSZ)apszPresParamColor[ulCounter])); if (((SHORT)mresult) == LIT_ERROR || ((SHORT)mresult) == LIT_MEMERROR) { MessageBox(hwndMain, IDMSG_CANNOTLOADSTRING, MB_OK | MB_ERROR, FALSE); return FALSE; } } hwndTemp = WinWindowFromID(hwnd, IDC_BACKCOLORLIST); for(ulCounter = 0; ulCounter < NUMCOLORS; ulCounter++) { mresult = WinSendMsg(hwndTemp, LM_INSERTITEM, MPFROMSHORT(LIT_SORTASCENDING), MPFROMP((PSZ)apszPresParamColor[ulCounter])); if (((SHORT)mresult) == LIT_ERROR || ((SHORT)mresult) == LIT_MEMERROR) { MessageBox(hwndMain, IDMSG_CANNOTLOADSTRING, MB_OK | MB_ERROR, FALSE); return FALSE; } } WinSendDlgItemMsg(hwnd, IDC_FORECOLORLIST, LM_SELECTITEM, MPFROMSHORT(0), MPFROMSHORT(TRUE)); WinSendDlgItemMsg(hwnd, IDC_BACKCOLORLIST, LM_SELECTITEM, MPFROMSHORT(NUMCOLORS - 1), MPFROMSHORT(TRUE)); WinSendDlgItemMsg(hwnd, IDC_DELAY_TIMER, SPBM_SETLIMITS, MPFROMLONG(5000), 0); WinSendDlgItemMsg(hwnd, IDC_DELAY_TIMER, SPBM_SETCURRENTVALUE, MPFROMLONG(TIMER_DELAY), 0); return TRUE; } /*********************************************************************/ BOOL UpdatePresParamDemoDlg(HWND hwnd) { HWND hwndTemp1, hwndTemp2, hwndSampleText; CHAR pszTemp1[COLORNAMELEN], pszTemp2[COLORNAMELEN]; ULONG ulColor, ulPresParams, j; SHORT sCounter; hwndTemp1 = WinWindowFromID(hwnd, IDC_FORECOLORLIST); if (WinQueryWindowText(hwndTemp1, COLORNAMELEN, (PSZ)pszTemp1)) { sCounter = 0; while (sCounter < NUMCOLORS) { if (!strcmp(pszTemp1, apszPresParamColor[sCounter])) { ulColor = aulColor[sCounter]; break; } else sCounter++; } if (sCounter < NUMCOLORS) { sCounter += IDS_FIRSTCOLOR; for (j = 0; j < CONTROLS_COUNT; j++) { hwndSampleText = WinWindowFromID(hwnd, IDC_SAMPLETEXT + j); if (sCounter < IDS_DEFAULT) { if (!WinSetPresParam(hwndSampleText, PP_FOREGROUNDCOLORINDEX, (ULONG)sizeof(LONG), (PVOID)&ulColor)) { MessageBox(hwndMain, IDMSG_CANNOTSETPP, MB_OK | MB_ERROR, FALSE); } } else { if (sCounter == IDS_DEFAULT && WinQueryPresParam(hwndSampleText, PP_FOREGROUNDCOLORINDEX, 0, &ulPresParams, (ULONG)sizeof(LONG), (PVOID)&ulColor, QPF_NOINHERIT) != 0) { if (!WinRemovePresParam(hwndSampleText, PP_FOREGROUNDCOLORINDEX)) { MessageBox(hwndMain, IDMSG_CANNOTSETPP, MB_OK | MB_ERROR, FALSE); } } } } } hwndTemp2 = WinWindowFromID(hwnd, IDC_BACKCOLORLIST); if (WinQueryWindowText(hwndTemp2, COLORNAMELEN, (PSZ)pszTemp2)) { sCounter = 0; while (sCounter < NUMCOLORS) { if (!strcmp(pszTemp2, apszPresParamColor[sCounter])) { ulColor = aulColor[sCounter]; break; } else sCounter++; } if (sCounter < NUMCOLORS) { sCounter += IDS_FIRSTCOLOR; for (j = 0; j < CONTROLS_COUNT; j++) { hwndSampleText = WinWindowFromID(hwnd, IDC_SAMPLETEXT + j); if (sCounter < IDS_DEFAULT) { if (!WinSetPresParam(hwndSampleText, PP_BACKGROUNDCOLORINDEX, (ULONG)sizeof(LONG), (PVOID)&ulColor)) { MessageBox(hwndMain, IDMSG_CANNOTSETPP, MB_OK | MB_ERROR, FALSE); } } else { if (sCounter == IDS_DEFAULT && WinQueryPresParam(hwndSampleText, PP_BACKGROUNDCOLORINDEX, 0, &ulPresParams, (ULONG)sizeof(LONG), (PVOID)&ulColor, QPF_NOINHERIT) != 0) { if (!WinRemovePresParam(hwndSampleText, PP_BACKGROUNDCOLORINDEX)) { MessageBox(hwndMain, IDMSG_CANNOTSETPP, MB_OK | MB_ERROR, FALSE); } } } } } } WinSetWindowText(hwndTemp1, pszTemp2); WinSetWindowText(hwndTemp2, pszTemp1); return TRUE; } /*********************************************************************/ SHORT MessageBox(HWND hwndOwner, SHORT idMsg, SHORT fsStyle, BOOL fBeep) { CHAR szText[MESSAGELEN]; CHAR szTitle[MESSAGELEN]; PSZ pszTitle = NULL; if(!WinLoadMessage(hab, (HMODULE)NULL, idMsg, MESSAGELEN, (PSZ)szText)) { WinAlarm(HWND_DESKTOP, WA_ERROR); return MBID_ERROR; } if(fBeep) WinAlarm(HWND_DESKTOP, WA_ERROR); if ( (fsStyle & MB_WARNING) && WinLoadString(hab, (HMODULE)0, IDS_WARNING, MESSAGELEN, szTitle) ) pszTitle = szTitle; else pszTitle = NULL; return(WinMessageBox(HWND_DESKTOP, hwndOwner, szText, pszTitle, IDD_MSGBOX, fsStyle)); } /***************************** * File Name : STYLE.RC ******************************/ #include <os2.h> #include "style.h" STRINGTABLE { IDS_BLUE "Blue" IDS_RED "Red" IDS_PINK "Pink" IDS_GREEN "Green" IDS_CYAN "Cyan" IDS_YELLOW "Yellow" IDS_DARKGRAY "Dark Gray" IDS_DARKBLUE "Dark Blue" IDS_DARKRED "Dark Red" IDS_DARKPINK "Dark Pink" IDS_DARKGREEN "Dark Green" IDS_DARKCYAN "Dark Cyan" IDS_BROWN "Brown" IDS_PALEGRAY "Pale Gray" IDS_DEFAULT "Default" IDS_WARNING "Warning" } MESSAGETABLE { IDMSG_CANNOTLOADSTRING "Failed to load string." IDMSG_CANNOTSETPP "Error setting presentation parameters." } DLGTEMPLATE IDD_PPDEMODLG BEGIN DIALOG "Style", IDD_PPDEMODLG, 15, 4, 240, 112, FS_NOBYTEALIGN | WS_VISIBLE, FCF_SYSMENU | FCF_TITLEBAR BEGIN RTEXT "~Foreground:", 256, 100, 96, 60, 8, SS_TEXT | DT_RIGHT | DT_TOP | DT_MNEMONIC | WS_VISIBLE | NOT WS_GROUP CONTROL "", IDC_FORECOLORLIST, 165, 62, 64, 42, WC_COMBOBOX, CBS_DROPDOWNLIST | WS_TABSTOP | WS_VISIBLE RTEXT "~Background:", 258, 100, 76, 60, 8, SS_TEXT | DT_RIGHT | DT_TOP | DT_MNEMONIC | WS_VISIBLE | NOT WS_GROUP CONTROL "", IDC_BACKCOLORLIST, 165, 42, 64, 43, WC_COMBOBOX, CBS_DROPDOWNLIST | WS_TABSTOP | WS_VISIBLE LTEXT "No", IDC_SAMPLETEXT, 4, 94, 10, 10, SS_TEXT | DT_CENTER | DT_VCENTER | WS_VISIBLE | NOT WS_GROUP LTEXT "No", IDC_SAMPLETEXT +1, 28, 94, 10, 10, SS_TEXT | DT_CENTER | DT_VCENTER | WS_VISIBLE | NOT WS_GROUP LTEXT "No", IDC_SAMPLETEXT +2, 52, 94, 10, 10, SS_TEXT | DT_CENTER | DT_VCENTER | WS_VISIBLE | NOT WS_GROUP LTEXT "No", IDC_SAMPLETEXT +3, 76, 94, 10, 10, SS_TEXT | DT_CENTER | DT_VCENTER | WS_VISIBLE | NOT WS_GROUP PUSHBUTTON "Exit", IDC_EXIT, 185, 3, 38, 13, BS_PUSHBUTTON | BS_DEFAULT | WS_VISIBLE | WS_TABSTOP LTEXT "No", IDC_SAMPLETEXT +4, 4, 77, 10, 10, SS_TEXT | DT_CENTER | DT_VCENTER | WS_VISIBLE | NOT WS_GROUP LTEXT "No", IDC_SAMPLETEXT +5, 28, 77, 10, 10, SS_TEXT | DT_CENTER | DT_VCENTER | WS_VISIBLE | NOT WS_GROUP LTEXT "No", IDC_SAMPLETEXT +6, 52, 77, 10, 10, SS_TEXT | DT_CENTER | DT_VCENTER | WS_VISIBLE | NOT WS_GROUP LTEXT "No", IDC_SAMPLETEXT +7, 76, 77, 10, 10, SS_TEXT | DT_CENTER | DT_VCENTER | WS_VISIBLE | NOT WS_GROUP CONTROL "No", IDC_SAMPLETEXT +8, 4, 57, 14, 14, WC_BUTTON, BS_PUSHBUTTON | WS_VISIBLE | WS_TABSTOP CONTROL "No", IDC_SAMPLETEXT +9, 27, 57, 14, 14, WC_BUTTON, BS_PUSHBUTTON | WS_VISIBLE | WS_TABSTOP CONTROL "No", IDC_SAMPLETEXT +10, 50, 57, 14, 14, WC_BUTTON, BS_PUSHBUTTON | WS_VISIBLE | WS_TABSTOP CONTROL "No", IDC_SAMPLETEXT +11, 73, 57, 14, 14, WC_BUTTON, BS_PUSHBUTTON | WS_VISIBLE | WS_TABSTOP CONTROL "No", IDC_SAMPLETEXT +12, 4, 38, 14, 14, WC_BUTTON, BS_PUSHBUTTON | WS_VISIBLE | WS_TABSTOP CONTROL "No", IDC_SAMPLETEXT +13, 27, 38, 14, 14, WC_BUTTON, BS_PUSHBUTTON | WS_VISIBLE | WS_TABSTOP CONTROL "No", IDC_SAMPLETEXT +14, 50, 38, 14, 14, WC_BUTTON, BS_PUSHBUTTON | WS_VISIBLE | WS_TABSTOP CONTROL "No", IDC_SAMPLETEXT +15, 73, 38, 14, 14, WC_BUTTON, BS_PUSHBUTTON | WS_VISIBLE | WS_TABSTOP CONTROL "Start", IDC_START_TIMER, 132, 30, 38, 14, WC_BUTTON, BS_PUSHBUTTON | WS_VISIBLE | WS_TABSTOP CONTROL "Stop", IDC_STOP_TIMER, 185, 30, 38, 14, WC_BUTTON, BS_PUSHBUTTON | WS_VISIBLE | WS_TABSTOP CONTROL "No", IDC_SAMPLETEXT +16, 5, 22, 12, 10, WC_ENTRYFIELD, ES_CENTER | ES_MARGIN | ES_ANY | WS_VISIBLE | WS_TABSTOP PRESPARAMS PP_BACKGROUNDCOLORINDEX , 15L CONTROL "No", IDC_SAMPLETEXT +17, 28, 22, 12, 10, WC_ENTRYFIELD, ES_CENTER | ES_MARGIN | ES_ANY | WS_VISIBLE | WS_TABSTOP PRESPARAMS PP_BACKGROUNDCOLORINDEX , 15L CONTROL "No", IDC_SAMPLETEXT +18, 51, 22, 12, 10, WC_ENTRYFIELD, ES_CENTER | ES_MARGIN | ES_ANY | WS_VISIBLE | WS_TABSTOP PRESPARAMS PP_BACKGROUNDCOLORINDEX , 15L CONTROL "No", IDC_SAMPLETEXT +19, 74, 22, 12, 10, WC_ENTRYFIELD, ES_CENTER | ES_MARGIN | ES_ANY | WS_VISIBLE | WS_TABSTOP PRESPARAMS PP_BACKGROUNDCOLORINDEX , 15L CONTROL "No", IDC_SAMPLETEXT +20, 5, 5, 12, 10, WC_ENTRYFIELD, ES_CENTER | ES_MARGIN | ES_ANY | WS_VISIBLE | WS_TABSTOP PRESPARAMS PP_BACKGROUNDCOLORINDEX , 15L CONTROL "No", IDC_SAMPLETEXT +21, 28, 5, 12, 10, WC_ENTRYFIELD, ES_CENTER | ES_MARGIN | ES_ANY | WS_VISIBLE | WS_TABSTOP PRESPARAMS PP_BACKGROUNDCOLORINDEX , 15L CONTROL "No", IDC_SAMPLETEXT +22, 51, 5, 12, 10, WC_ENTRYFIELD, ES_CENTER | ES_MARGIN | ES_ANY | WS_VISIBLE | WS_TABSTOP PRESPARAMS PP_BACKGROUNDCOLORINDEX , 15L CONTROL "No", IDC_SAMPLETEXT +23, 74, 5, 12, 10, WC_ENTRYFIELD, ES_CENTER | ES_MARGIN | ES_ANY | WS_VISIBLE | WS_TABSTOP PRESPARAMS PP_BACKGROUNDCOLORINDEX , 15L CONTROL "Sample", IDC_DELAY_TIMER, 165, 52, 44, 12, WC_SPINBUTTON, SPBS_SERVANT | SPBS_NUMERICONLY | SPBS_JUSTLEFT | WS_VISIBLE | WS_TABSTOP CONTROL "~Delay:", 102, 117, 52, 40, 8, WC_STATIC, SS_TEXT | DT_RIGHT | DT_TOP | DT_MNEMONIC | WS_VISIBLE CONTROL "ms", 103, 211, 53, 16, 8, WC_STATIC, SS_TEXT | DT_CENTER | DT_VCENTER | DT_MNEMONIC | WS_VISIBLE CONTROL "Timer", 104, 107, 20, 123, 50, WC_STATIC, SS_GROUPBOX | DT_LEFT | DT_TOP | DT_MNEMONIC | WS_VISIBLE END END |