Code:
#include <iomanip>
#include <sstream>
#include <cstdlib>
#include "windows.h"
#include "commctrl.h"
#include "ifschooserwindow.hpp"
#include "debug.hpp"
using namespace std;
void TIFSChooserWindow::ConstructIFSEntryWindow()
{
//...
//Create the trackbar
ProbabilityTrackbar = CreateProbabilityTrackbar();
//...
ProbabilityEditBox = CreateIFSEntryWindowEditBox(ENTRYCHILD_PROBABILITYEDITBOX, 5, IFSEntryWindowHeight - 110, 50, false);
//...
return;
}
//...
HWND TIFSChooserWindow::CreateProbabilityTrackbar()
{
return CreateWindowEx(
(DWORD) NULL,
TRACKBAR_CLASS,
"Probability",
(WS_CHILD | WS_VISIBLE | TBS_HORZ),
5,
IFSEntryWindowHeight - 85,
IFSEntryWindowWidth - 10,
30,
IFSEntryWindow,
(HMENU) ENTRYCHILD_PROBABILITYTRACKBAR,
AppInst,
NULL
);
}
//...
HWND TIFSChooserWindow::CreateIFSEntryWindowEditBox(int ID, int x, int y, int Width, bool PartOfTabs)
{
if (PartOfTabs)
{
return CreateWindowEx(
(DWORD) NULL,
"EDIT",
NULL,
(WS_CHILD | WS_BORDER),
x,
y,
Width,
20,
IFSEntryWindow,
(HMENU) ID,
AppInst,
(LPVOID) NULL
);
}
else
{
return CreateWindowEx(
(DWORD) NULL,
"EDIT",
NULL,
(WS_CHILD | WS_VISIBLE | WS_BORDER),
x,
y,
Width,
20,
IFSEntryWindow,
(HMENU) ID,
AppInst,
(LPVOID) NULL
);
}
}
LRESULT CALLBACK TIFSChooserWindow::EntryWndProc(HWND hwnd, UINT MsgIdent, WPARAM wParam, LPARAM lParam)
{
switch(MsgIdent)
{
//...
if (HIWORD(wParam) == EN_CHANGE)
{
if (LOWORD(wParam) == ENTRYCHILD_PROBABILITYEDITBOX)
{
UpdateProbabilityTrackbar();
}
}
break;
//...
case WM_HSCROLL:
UpdateProbabilityEditBox();
break;
//...
default:
return DefWindowProc(hwnd, MsgIdent, wParam, lParam);
break;
}
return 0;
}
LRESULT CALLBACK TIFSChooserWindow::GlobalEntryWndProc(HWND hwnd, UINT MsgIdent, WPARAM wParam, LPARAM lParam)
{
TIFSChooserWindow *self;
switch(MsgIdent)
{
case WM_CREATE:
self = (TIFSChooserWindow *) ((CREATESTRUCT *) lParam)->lpCreateParams;
SetWindowLongPtr(hwnd, GWLP_USERDATA, ((LONG_PTR) self));
return self->EntryWndProc(hwnd, MsgIdent, wParam, lParam);
break;
default:
self = (TIFSChooserWindow *) GetWindowLongPtr(hwnd, GWLP_USERDATA);
return self->EntryWndProc(hwnd, MsgIdent, wParam, lParam);
break;
}
return 0;
}
//...
void TIFSChooserWindow::UpdateProbabilityTrackbar()
{
float CurrentProb;
TCHAR *s = new TCHAR[5];
s[0] = (TCHAR) 5; //Required by the EM_GETLINE message.
SendMessage(ProbabilityEditBox, EM_GETLINE, (WPARAM) 0, (LPARAM) s);
CurrentProb = strtod(s, NULL); //Returns 0.0 if invalid.
SendMessage(ProbabilityTrackbar, TBM_SETPOS, (WPARAM) TRUE, (LPARAM) (int) (CurrentProb * 100));
delete s;
return;
}
void TIFSChooserWindow::UpdateProbabilityEditBox()
{
float CurrentProb;
stringstream ss;
CurrentProb = ((float) SendMessage(ProbabilityTrackbar, TBM_GETPOS, 0, 0)) / 100;
ss << setprecision(3) << CurrentProb;
SendMessage(ProbabilityEditBox, WM_SETTEXT, 0, (LPARAM) ss.str().c_str());
return;
}
//...