|
|
#include "precomp.h"
// Private forward decalarations
static BOOL CALLBACK enumComboBoxChildrenWndProc(HWND hwndChild, LPARAM lParam); static BOOL isCtrlWithFocus(HWND hCtrl);
void InitSysFont(HWND hDlg, int iCtrlID) { static HFONT s_hfontSys = NULL;
LOGFONT lf; HDC hDC; HWND hwndCtrl = GetDlgItem(hDlg, iCtrlID); HFONT hFont; int cyLogPixels;
hDC = GetDC(NULL); if (hDC == NULL) return;
cyLogPixels = GetDeviceCaps(hDC, LOGPIXELSY); ReleaseDC(NULL, hDC);
if (s_hfontSys == NULL) { LOGFONT lfTemp; HFONT hfontDef = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
GetObject(hfontDef, sizeof(lfTemp), &lfTemp); hFont = GetWindowFont(hwndCtrl); if (hFont != NULL) if (GetObject(hFont, sizeof(LOGFONT), (PVOID)&lf)) { StrCpy(lf.lfFaceName, lfTemp.lfFaceName); lf.lfQuality = lfTemp.lfQuality; lf.lfPitchAndFamily = lfTemp.lfPitchAndFamily; lf.lfCharSet = lfTemp.lfCharSet;
s_hfontSys = CreateFontIndirect(&lf); } }
if (iCtrlID == 0xFFFF) return;
if (s_hfontSys != NULL) SetWindowFont(hwndCtrl, s_hfontSys, FALSE); }
UINT GetRadioButton(HWND hDlg, UINT idFirst, UINT idLast) { for (UINT id = idFirst; id <= idLast; id++) if (IsDlgButtonChecked(hDlg, id)) return id;
return 0; }
BOOL EnableDlgItems(HWND hDlg, const PINT pidCtrls, UINT cidCtrls, BOOL fEnable /*= TRUE*/) { HWND hCtrl; UINT i; BOOL fTotalSuccess;
if (hDlg == NULL || pidCtrls == NULL || cidCtrls == 0) return FALSE;
fTotalSuccess = TRUE; for (i = 0; i < cidCtrls; i++) { hCtrl = GetDlgItem(hDlg, *(pidCtrls + i)); if (hCtrl == NULL) { fTotalSuccess = FALSE; continue; }
if (fEnable != IsWindowEnabled(hCtrl)) EnableWindow(hCtrl, fEnable); }
return fTotalSuccess; }
BOOL SetDlgItemFocus(HWND hDlg, int iCtrlID, BOOL fUsePropertySheet /*= FALSE*/) { // Back, Next, Finish
static UINT s_rgidReserved[] = { 0x3023, 0x3024, 0x3025, IDHELP, IDCANCEL };
HWND hCtrl; DWORD dwStyle; UINT i;
if (fUsePropertySheet) { for (i = 0; i < countof(s_rgidReserved); i++) if ((UINT)iCtrlID == s_rgidReserved[i]) break;
if (i < countof(s_rgidReserved)) hDlg = GetParent(hDlg); }
hCtrl = GetDlgItem(hDlg, iCtrlID); if (hCtrl == NULL) return FALSE;
ASSERT(IsWindowEnabled(hCtrl) && IsWindowVisible(hCtrl)); SetFocus(hCtrl);
dwStyle = GetWindowLong(hCtrl, GWL_STYLE); if (HasFlag(dwStyle, BS_PUSHBUTTON)) Button_SetStyle(hCtrl, BS_DEFPUSHBUTTON, TRUE);
return TRUE; }
BOOL EnsureDialogFocus(HWND hDlg, int idFocus, int idBackup, BOOL fUsePropertySheet /*= FALSE*/) { HWND hCtrl; DWORD dwStyle;
hCtrl = GetDlgItem(hDlg, idFocus); if (hCtrl == NULL) return FALSE;
if (!isCtrlWithFocus(hCtrl)) return TRUE;
dwStyle = GetWindowLong(hCtrl, GWL_STYLE);
if (HasFlag(dwStyle, BS_DEFPUSHBUTTON) && !HasFlag(dwStyle, BS_USERBUTTON)) Button_SetStyle(hCtrl, BS_PUSHBUTTON, TRUE);
return SetDlgItemFocus(hDlg, idBackup, fUsePropertySheet); }
BOOL EnsureDialogFocus(HWND hDlg, const PINT pidFocus, UINT cidFocus, int idBackup, BOOL fUsePropertySheet /*= FALSE*/) { HWND hCtrl; DWORD dwStyle; UINT i;
if (pidFocus == NULL || cidFocus == 0) return FALSE;
hCtrl = NULL;
for (i = 0; i < cidFocus; i++) { hCtrl = GetDlgItem(hDlg, *(pidFocus + i)); if (hCtrl == NULL) return FALSE;
if (isCtrlWithFocus(hCtrl)) break; } if (i >= cidFocus) return TRUE;
ASSERT(hCtrl != NULL); dwStyle = GetWindowLong(hCtrl, GWL_STYLE); if (HasFlag(dwStyle, BS_DEFPUSHBUTTON) && !HasFlag(dwStyle, BS_USERBUTTON)) Button_SetStyle(hCtrl, BS_PUSHBUTTON, TRUE);
return SetDlgItemFocus(hDlg, idBackup, fUsePropertySheet); }
void SetDlgItemTextTriState(HWND hDlg, INT nIDDlgText, INT nIDDlgCheck, LPCTSTR lpString, BOOL fChecked) { CheckDlgButton(hDlg, nIDDlgCheck, fChecked ? BST_CHECKED : BST_UNCHECKED); EnableDlgItem2(hDlg, nIDDlgText, fChecked); SetDlgItemText(hDlg, nIDDlgText, lpString); }
BOOL GetDlgItemTextTriState(HWND hDlg, INT nIDDlgText, INT nIDDlgCheck, LPTSTR lpString, int nMaxCount) { GetDlgItemText(hDlg, nIDDlgText, lpString, nMaxCount);
return (IsDlgButtonChecked(hDlg, nIDDlgCheck) == BST_CHECKED); }
void IsTriStateValid(HWND hDlg, INT nIDDlgText, INT nIDDlgCheck, LPINT pnStatus, LPCTSTR pcszErrMsg, LPCTSTR pcszTitle) { TCHAR szBuf[INTERNET_MAX_URL_LENGTH];
if (*pnStatus == TS_CHECK_ERROR || *pnStatus == TS_CHECK_SKIP) return;
*pnStatus = TS_CHECK_OK; if (IsDlgButtonChecked(hDlg, nIDDlgCheck) == BST_CHECKED) { GetDlgItemText(hDlg, nIDDlgText, szBuf, countof(szBuf)); if (ISNULL(szBuf)) { if (MessageBox(hDlg, pcszErrMsg, pcszTitle, MB_ICONQUESTION|MB_YESNO) == IDNO) { SetFocus(GetDlgItem(hDlg, nIDDlgText)); *pnStatus = TS_CHECK_ERROR; } else *pnStatus = TS_CHECK_SKIP; } } }
/////////////////////////////////////////////////////////////////////////////
// Implementation helpers routines (private)
static BOOL CALLBACK enumComboBoxChildrenWndProc(HWND hwndChild, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); // check to see if this child window of the combo box has focus
if (hwndChild == GetFocus()) return FALSE; // stop enumeration
return TRUE; }
static BOOL isCtrlWithFocus(HWND hCtrl) { DWORD dwStyle;
if (hCtrl == GetFocus()) return TRUE;
dwStyle = GetWindowLong(hCtrl, GWL_STYLE);
// Check to see if this is a combo box with a hidden edit control
if ((HasFlag(dwStyle, CBS_DROPDOWN) || HasFlag(dwStyle, CBS_SIMPLE)) && !(HasFlag(dwStyle, CBS_DROPDOWN) && HasFlag(dwStyle, CBS_SIMPLE))) { if (!EnumChildWindows(hCtrl, (WNDENUMPROC)enumComboBoxChildrenWndProc, 0)) return TRUE; }
return FALSE; }
|