[dasher: 30/61] Simplified Status control creation.
- From: Patrick Welche <pwelche src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dasher: 30/61] Simplified Status control creation.
- Date: Thu, 28 Dec 2017 10:05:06 +0000 (UTC)
commit 69119eaebc77c25600c75b197bfa62eaf581f7d3
Author: Ada Majorek <amajorek google com>
Date: Fri Jul 22 15:17:22 2016 -0700
Simplified Status control creation.
By loading layout from resources.
This should also get rid of puzzling doctor memory warnings.
Src/Win32/Dasher.rc | 68 ++++++++++--
Src/Win32/Widgets/StatusControl.cpp | 198 ++++++++---------------------------
Src/Win32/Widgets/StatusControl.h | 43 +++-----
Src/Win32/resource.h | 8 +-
4 files changed, 122 insertions(+), 195 deletions(-)
---
diff --git a/Src/Win32/Dasher.rc b/Src/Win32/Dasher.rc
index 88921ef..80f57e3 100644
--- a/Src/Win32/Dasher.rc
+++ b/Src/Win32/Dasher.rc
@@ -59,6 +59,52 @@ END
#endif // APSTUDIO_INVOKED
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_STATUSBAR DIALOGEX 0, 0, 151, 14
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ RTEXT "Speed:",IDC_STATIC,0,3,29,8
+ EDITTEXT IDC_SPEED_EDIT,30,0,28,14,ES_RIGHT,WS_EX_CLIENTEDGE
+ CONTROL "",IDC_SPEED_SPIN,"msctls_updown32",UDS_ALIGNRIGHT | UDS_ARROWKEYS,58,0,10,14
+ RTEXT "Alphabet:",IDC_STATIC,69,3,40,8
+ COMBOBOX IDC_ALPHABET_COMBO,110,1,48,14,CBS_DROPDOWNLIST,WS_EX_CLIENTEDGE
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO
+BEGIN
+ IDD_STATUSBAR, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ VERTGUIDE, 148
+ TOPMARGIN, 7
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// AFX_DIALOG_LAYOUT
+//
+
+IDD_STATUSBAR AFX_DIALOG_LAYOUT
+BEGIN
+ 0
+END
+
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////
@@ -281,6 +327,17 @@ END
/////////////////////////////////////////////////////////////////////////////
//
+// AFX_DIALOG_LAYOUT
+//
+
+IDD_APPPAGE AFX_DIALOG_LAYOUT
+BEGIN
+ 0
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
// Icon
//
@@ -391,17 +448,6 @@ END
/////////////////////////////////////////////////////////////////////////////
//
-// AFX_DIALOG_LAYOUT
-//
-
-IDD_APPPAGE AFX_DIALOG_LAYOUT
-BEGIN
- 0
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
// String Table
//
diff --git a/Src/Win32/Widgets/StatusControl.cpp b/Src/Win32/Widgets/StatusControl.cpp
index 2d510da..cc55ca6 100644
--- a/Src/Win32/Widgets/StatusControl.cpp
+++ b/Src/Win32/Widgets/StatusControl.cpp
@@ -4,11 +4,10 @@
#include <string>
-CStatusControl::CStatusControl(Dasher::CSettingsUser *pCreateFrom, CAppSettings *pAppSettings)
- : CSettingsObserver(pCreateFrom), m_pAppSettings(pAppSettings) {
- m_hEdit = m_hUpDown = m_hCombo = m_hSpeedLabel = m_hAlphabetLabel =0;
-
- m_iEditWidth = m_iEditHeight = 0;
+CStatusControl::CStatusControl(Dasher::CSettingsUser *pCreateFrom, CAppSettings *pAppSettings)
+ : CSettingsObserver(pCreateFrom),
+ m_pAppSettings(pAppSettings),
+ m_dialogHeight(0) {
}
void CStatusControl::HandleEvent(int iParameter) {
@@ -25,164 +24,55 @@ void CStatusControl::HandleEvent(int iParameter) {
break;
}
}
+LRESULT CStatusControl::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {
+ m_hEdit = GetDlgItem(IDC_SPEED_EDIT);
+ m_hUpDown = GetDlgItem(IDC_SPEED_SPIN);
+ m_hCombo = GetDlgItem(IDC_ALPHABET_COMBO);
-// TODO: ATL has more sophisticated handlers for conrol and notify messages - consider using them instead
-LRESULT CStatusControl::OnCommand(UINT message, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {
- switch(HIWORD(wParam)) {
- case CBN_SELCHANGE:
- SelectAlphabet();
- break;
- default:
- bHandled = false;
- break;
- }
+ RECT r = { 0,0,0,14 };
+ MapDialogRect(&r);
+ m_dialogHeight = r.bottom;
- return 0;
+ m_hEdit.SendMessage(EM_LIMITTEXT, (WPARAM)4, (LPARAM)0);
+ m_hUpDown.SendMessage(UDM_SETRANGE, 0, (LPARAM)MAKELONG(800, 1));
+
+ PopulateCombo();
+ PopulateSpeed();
+ return 1;
}
-LRESULT CStatusControl::OnNotify(UINT message, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {
- NMHDR *pNotify((LPNMHDR)lParam);
-
- switch(pNotify->code) {
- case UDN_DELTAPOS:
- UpdateSpeed(((LPNMUPDOWN) lParam)->iPos, ((LPNMUPDOWN) lParam)->iDelta);
- break;
- case EN_CHANGE:
- {
- TCHAR wszBuffer[32];
- SendMessage(m_hEdit, WM_GETTEXT, 32, (long)wszBuffer);
- double dNewSpeed = _tstof(wszBuffer);
-
- m_pAppSettings->SetLongParameter(LP_MAX_BITRATE, dNewSpeed * 100);
- }
- break;
- default:
- bHandled = false;
- break;
- }
+LRESULT CStatusControl::OnSpeedSpinChange(int idCtrl, LPNMHDR pNMHDR, BOOL& bHandled) {
+ LPNMUPDOWN pUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
+ if (pUpDown->hdr.code == UDN_DELTAPOS)
+ UpdateSpeed(pUpDown->iPos, pUpDown->iDelta);
+ else
+ bHandled = false;
return 0;
}
-LRESULT CStatusControl::OnSize(UINT message, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {
- LayoutChildrenUpdate();
+LRESULT CStatusControl::OnSpeedEditChange(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) {
+ CString wideText;
+ m_hEdit.GetWindowText(wideText);
+ double dNewSpeed = _tstof(wideText);
+ m_pAppSettings->SetLongParameter(LP_MAX_BITRATE, dNewSpeed * 100);
return 0;
}
-HWND CStatusControl::Create(HWND hParent) {
- CWindowImpl<CStatusControl>::Create(hParent, 0, 0, WS_VISIBLE | WS_CHILD );
-
- CreateChildren();
-
- PopulateCombo();
- PopulateSpeed();
-
- LayoutChildrenInitial();
-
- return m_hWnd;
-}
-
-void CStatusControl::CreateChildren() {
- // First create the two static labels.
- HGDIOBJ hGuiFont;
- hGuiFont = GetStockObject(DEFAULT_GUI_FONT);
-
- std::wstring strSpeedLabel(L"Speed:");
- std::wstring strAlphabetLabel(L"Alphabet:");
-
- // TODO: Wrap windows here in CWindow classes.
- m_hSpeedLabel = CreateWindowEx(WS_EX_CONTROLPARENT, TEXT("STATIC"), strSpeedLabel.c_str(),
- SS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0, 0, 0, 0, m_hWnd, NULL, WinHelper::hInstApp, NULL);
-
- m_hAlphabetLabel = CreateWindowEx(WS_EX_CONTROLPARENT, TEXT("STATIC"), strAlphabetLabel.c_str(),
- SS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0, 0, 0, 0, m_hWnd, NULL, WinHelper::hInstApp, NULL);
-
- SendMessage(m_hSpeedLabel, WM_SETFONT, (WPARAM) hGuiFont, true);
- SendMessage(m_hAlphabetLabel, WM_SETFONT, (WPARAM) hGuiFont, true);
-
- SIZE sSize;
-
- HDC hSpeedDC(::GetDC(m_hSpeedLabel));
- SelectObject(hSpeedDC, hGuiFont);
- GetTextExtentPoint32(hSpeedDC, strSpeedLabel.c_str(), strSpeedLabel.size(), &sSize);
- ::MoveWindow(m_hSpeedLabel, 0, 0, sSize.cx + 4, sSize.cy, false);
- ::ReleaseDC(m_hSpeedLabel, hSpeedDC);
-
- HDC hAlphabetDC(::GetDC(m_hAlphabetLabel));
- SelectObject(hAlphabetDC, hGuiFont);
- GetTextExtentPoint32(hAlphabetDC, strAlphabetLabel.c_str(), strAlphabetLabel.size(), &sSize);
- ::MoveWindow(m_hAlphabetLabel, 0, 0, sSize.cx + 4, sSize.cy, false);
- ::ReleaseDC(m_hAlphabetLabel, hAlphabetDC);
-
- // Next the edit box and up/down control
- m_hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("EDIT"), TEXT(""), WS_CHILD | WS_TABSTOP | WS_VISIBLE |
WS_GROUP, 0, 0, 0, CW_USEDEFAULT, m_hWnd, NULL, WinHelper::hInstApp, NULL);
- SendMessage(m_hEdit, EM_LIMITTEXT, (WPARAM) 4, (LPARAM) 0);
-
- HDC hdc = ::GetDC(m_hEdit);
- TEXTMETRIC tmGui;
- GetTextMetrics(hdc, &tmGui);
- SendMessage(m_hEdit, WM_SETFONT, (WPARAM) hGuiFont, true);
- ::ReleaseDC(m_hEdit, hdc);
-
- m_iEditHeight = tmGui.tmHeight + (GetSystemMetrics(SM_CYEDGE) * 2);
- m_iEditWidth = tmGui.tmAveCharWidth * 7;
- ::MoveWindow(m_hEdit, 0, 0, m_iEditWidth, m_iEditHeight, false);
-
- m_hUpDown = CreateWindowEx(WS_EX_CLIENTEDGE, UPDOWN_CLASS, TEXT(""), UDS_ALIGNRIGHT | WS_CHILD |
WS_TABSTOP |WS_VISIBLE | WS_GROUP, 0, 0, 16, 16, m_hWnd, NULL, WinHelper::hInstApp, NULL);
- SendMessage(m_hUpDown, UDM_SETRANGE, 0, (LPARAM) MAKELONG(800, 1));
-
- // And finally the combo box
- m_hCombo = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("COMBOBOX"), TEXT(""), CBS_DROPDOWNLIST | WS_CHILD |
WS_TABSTOP | WS_VISIBLE |WS_GROUP | ES_READONLY, 0, 0, 128, 128, m_hWnd, NULL, WinHelper::hInstApp, NULL);
- SendMessage(m_hCombo, WM_SETFONT, (WPARAM) hGuiFont, true);
-
- DeleteObject(hGuiFont);
-
- // Set the height to what is finally required. The extra pixel is needed to get everything to line up
nicely
- MoveWindow(0, 0, 0, m_iEditHeight+1, false);
+LRESULT CStatusControl::OnAlphabetChanged(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) {
+ SelectAlphabet();
+ return 0;
}
-void CStatusControl::LayoutChildrenInitial() {
+LRESULT CStatusControl::OnSize(UINT message, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {
RECT rc;
- GetWindowRect(&rc);
-
- // And how much is needed for the various bits and pieces
- RECT sRect;
-
- ::GetWindowRect(m_hSpeedLabel, &sRect);
- int iSpeedLabelWidth(sRect.right - sRect.left);
- int iSpeedLabelHeight(sRect.bottom - sRect.top);
-
- ::GetWindowRect(m_hAlphabetLabel, &sRect);
- int iAlphabetLabelWidth(sRect.right - sRect.left);
- int iAlphabetLabelHeight(sRect.bottom - sRect.top);
-
- ::GetWindowRect(m_hEdit, &sRect);
- int iEditHeight(sRect.bottom - sRect.top);
-
- ::GetWindowRect(m_hCombo, &sRect);
- int iComboWidth(sRect.right - sRect.left);
- int iComboHeight(sRect.bottom - sRect.top);
-
- // Finally, do the layout
- // TODO: This isn't necessary - the only thing which is going to change is the width of the combo
- int iPosition(0);
-
- ::MoveWindow(m_hSpeedLabel, iPosition, (iEditHeight - iSpeedLabelHeight) / 2, iSpeedLabelWidth,
iSpeedLabelHeight, TRUE);
- iPosition += iSpeedLabelWidth + 2;
-
- ::MoveWindow(m_hEdit, iPosition, 0, m_iEditWidth, iEditHeight, TRUE);
- ::SendMessage(m_hUpDown, UDM_SETBUDDY, (WPARAM)m_hEdit, 0);
- iPosition += m_iEditWidth + 2;
-
- ::MoveWindow(m_hAlphabetLabel, iPosition, (iEditHeight - iAlphabetLabelHeight) / 2, iAlphabetLabelWidth,
iAlphabetLabelHeight, TRUE);
- iPosition += iAlphabetLabelWidth + 2;
-
- ::MoveWindow(m_hCombo, iPosition, 0, rc.right - rc.left - iPosition, iComboHeight, TRUE);
-}
-
-void CStatusControl::LayoutChildrenUpdate() {
- // For now don't do anything special here
- LayoutChildrenInitial();
+ GetClientRect(&rc);
+ RECT comboRc;
+ m_hCombo.GetWindowRect(&comboRc);
+ ScreenToClient(&comboRc);
+ comboRc.right = rc.right - rc.left;
+ m_hCombo.MoveWindow(&comboRc, true);
+ return 0;
}
void CStatusControl::PopulateCombo() {
@@ -240,11 +130,9 @@ void CStatusControl::SelectAlphabet() {
void CStatusControl::PopulateSpeed() {
int iValue(m_pAppSettings->GetLongParameter(LP_MAX_BITRATE));
- TCHAR *Buffer = new TCHAR[10];
+ TCHAR Buffer[10];
_stprintf(Buffer, TEXT("%0.2f"), iValue / 100.0);
SendMessage(m_hEdit, WM_SETTEXT, 0, (LPARAM) (LPCSTR) Buffer);
- delete[]Buffer;
-
SendMessage(m_hUpDown, UDM_SETPOS, 0, (LPARAM) MAKELONG ((short)iValue, 0));
}
@@ -257,10 +145,10 @@ void CStatusControl::UpdateSpeed(int iPos, int iDelta) {
if(iValue < 1)
iValue = 1;
- TCHAR *Buffer = new TCHAR[10];
+ TCHAR Buffer[10];
_stprintf(Buffer, TEXT("%0.2f"), iValue / 100.0);
- SendMessage(m_hEdit, WM_SETTEXT, 0, (LPARAM) (LPCSTR) Buffer);
- delete[]Buffer;
+ SendMessage(m_hEdit, WM_SETTEXT, 0, (LPARAM)(LPCSTR)Buffer);
m_pAppSettings->SetLongParameter(LP_MAX_BITRATE, iValue);
+
}
diff --git a/Src/Win32/Widgets/StatusControl.h b/Src/Win32/Widgets/StatusControl.h
index 35e16ed..102dd98 100644
--- a/Src/Win32/Widgets/StatusControl.h
+++ b/Src/Win32/Widgets/StatusControl.h
@@ -4,46 +4,39 @@
#include "../Common/WinCommon.h"
#include "../../DasherCore/SettingsStore.h"
#include "../AppSettings.h"
+#include "../resource.h"
#include <atlbase.h>
#include <atlwin.h>
-class CStatusControl : public ATL::CWindowImpl<CStatusControl>, public Dasher::CSettingsObserver {
+class CStatusControl : public ATL::CDialogImpl<CStatusControl>, public Dasher::CSettingsObserver {
public:
CStatusControl(Dasher::CSettingsUser *pCreateFrom, CAppSettings *pAppSettings);
- // ATL boilerplate code
- DECLARE_WND_SUPERCLASS(L"STATUSCONTROL", L"STATIC");
+ enum { IDD = IDD_STATUSBAR};
BEGIN_MSG_MAP(CStatusControl)
- MESSAGE_HANDLER(WM_COMMAND, OnCommand)
- MESSAGE_HANDLER(WM_NOTIFY, OnNotify)
+ MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
MESSAGE_HANDLER(WM_SIZE, OnSize)
+ COMMAND_HANDLER(IDC_ALPHABET_COMBO, CBN_SELCHANGE, OnAlphabetChanged)
+ COMMAND_HANDLER(IDC_SPEED_EDIT, EN_CHANGE, OnSpeedEditChange)
+ NOTIFY_HANDLER(IDC_SPEED_SPIN, UDN_DELTAPOS, OnSpeedSpinChange)
END_MSG_MAP()
// Message handlers:
- LRESULT OnCommand(UINT message, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
- LRESULT OnNotify(UINT message, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+ LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnSize(UINT message, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+ LRESULT OnAlphabetChanged(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
+ LRESULT OnSpeedEditChange(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
+ LRESULT OnSpeedSpinChange(int idCtrl, LPNMHDR pNMHDR, BOOL& bHandled);
- // Create the window, with children
- HWND Create(HWND hParent);
int GetHeight() {
- return m_iEditHeight + 2;
+ return m_dialogHeight;
}
void HandleEvent(int iParameter);
private:
- // Create the child windows of the control
- void CreateChildren();
-
- // Initial layout of child windows
- void LayoutChildrenInitial();
-
- // Incremental update of child windows
- void LayoutChildrenUpdate();
-
// Update the contents of the alphabet seletion combo
void PopulateCombo();
@@ -60,14 +53,10 @@ private:
CAppSettings *m_pAppSettings;
// Handles to child windows
- HWND m_hEdit;
- HWND m_hUpDown;
- HWND m_hCombo;
- HWND m_hSpeedLabel;
- HWND m_hAlphabetLabel;
-
- int m_iEditWidth;
- int m_iEditHeight;
+ CWindow m_hEdit;
+ CWindow m_hUpDown;
+ CWindow m_hCombo;
+ int m_dialogHeight;
};
#endif
\ No newline at end of file
diff --git a/Src/Win32/resource.h b/Src/Win32/resource.h
index f4a802e..cde219a 100644
--- a/Src/Win32/resource.h
+++ b/Src/Win32/resource.h
@@ -36,6 +36,7 @@
#define IDD_APPEARANCEPAGE 178
#define IDD_APPPAGE 179
#define IDD_MODULESETTINGS 180
+#define IDD_STATUSBAR 182
#define IDC_INPUT_LIST 1008
#define IDC_CONTROL_LIST 1009
#define IDC_ALPHABETS 1010
@@ -90,6 +91,9 @@
#define IDC_CHECK5 1157
#define IDC_CONTROLBOXES 1160
#define IDC_FILE_ENCODING 1161
+#define IDC_SPEED_EDIT 1163
+#define IDC_SPEED_SPIN 1164
+#define IDC_ALPHABET_COMBO 1166
#define ID_EDIT_SELECTALL 32775
#define ID_HELP_CONTENTS 32776
#define ID_EDIT_COPY_ALL 32798
@@ -107,9 +111,9 @@
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 182
+#define _APS_NEXT_RESOURCE_VALUE 184
#define _APS_NEXT_COMMAND_VALUE 32820
-#define _APS_NEXT_CONTROL_VALUE 1162
+#define _APS_NEXT_CONTROL_VALUE 1167
#define _APS_NEXT_SYMED_VALUE 110
#endif
#endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]