91 lines
2.1 KiB
C
91 lines
2.1 KiB
C
// 16 august 2015
|
|
#include "uipriv_windows.h"
|
|
|
|
HWND uiWindowsEnsureCreateControlHWND(DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName, DWORD dwStyle, HINSTANCE hInstance, LPVOID lpParam, BOOL useStandardControlFont)
|
|
{
|
|
HWND hwnd;
|
|
|
|
// don't let using the arrow keys in a uiRadioButtons leave the radio buttons
|
|
if ((dwStyle & WS_TABSTOP) != 0)
|
|
dwStyle |= WS_GROUP;
|
|
hwnd = CreateWindowExW(dwExStyle,
|
|
lpClassName, lpWindowName,
|
|
dwStyle | WS_CHILD | WS_VISIBLE,
|
|
0, 0,
|
|
// use a nonzero initial size just in case some control breaks with a zero initial size
|
|
100, 100,
|
|
utilWindow, NULL, hInstance, lpParam);
|
|
if (hwnd == NULL)
|
|
logLastError("error creating window in uiWindowsUtilCreateControlHWND()");
|
|
if (useStandardControlFont)
|
|
SendMessageW(hwnd, WM_SETFONT, (WPARAM) hMessageFont, (LPARAM) TRUE);
|
|
return hwnd;
|
|
}
|
|
|
|
static uintmax_t type_uiWindowsControl = 0;
|
|
|
|
uintmax_t uiWindowsControlType(void)
|
|
{
|
|
if (type_uiWindowsControl == 0)
|
|
type_uiWindowsControl = uiRegisterType("uiWindowsControl", uiControlType(), sizeof (uiWindowsControl));
|
|
return type_uiWindowsControl;
|
|
}
|
|
|
|
static void defaultCommitShow(uiControl *c)
|
|
{
|
|
ShowWindow((HWND) uiControlHandle(c), SW_SHOW);
|
|
}
|
|
|
|
static void defaultCommitHide(uiControl *c)
|
|
{
|
|
ShowWindow((HWND) uiControlHandle(c), SW_HIDE);
|
|
}
|
|
|
|
void osCommitEnable(uiControl *c)
|
|
{
|
|
EnableWindow((HWND) uiControlHandle(c), TRUE);
|
|
}
|
|
|
|
void osCommitDisable(uiControl *c)
|
|
{
|
|
EnableWindow((HWND) uiControlHandle(c), FALSE);
|
|
}
|
|
|
|
void uiWindowsFinishControl(uiControl *c)
|
|
{
|
|
c->CommitShow = defaultCommitShow;
|
|
c->CommitHide = defaultCommitHide;
|
|
}
|
|
|
|
char *uiWindowsUtilText(HWND hwnd)
|
|
{
|
|
WCHAR *wtext;
|
|
char *text;
|
|
|
|
wtext = windowText(hwnd);
|
|
text = toUTF8(wtext);
|
|
uiFree(wtext);
|
|
return text;
|
|
}
|
|
|
|
void uiWindowsUtilSetText(HWND hwnd, const char *text)
|
|
{
|
|
WCHAR *wtext;
|
|
|
|
wtext = toUTF16(text);
|
|
if (SetWindowTextW(hwnd, wtext) == 0)
|
|
logLastError("error setting control text in uiWindowsControlSetText()");
|
|
uiFree(wtext);
|
|
}
|
|
|
|
void uiWindowsRearrangeControlIDsZOrder(uiControl *c)
|
|
{
|
|
uiWindowsControl *wc;
|
|
|
|
c = uiControlParent(c);
|
|
if (c == NULL)
|
|
return;
|
|
wc = uiWindowsControl(c);
|
|
(*(wc->ArrangeChildrenControlIDsZOrder))(wc);
|
|
}
|