📄 dialog.c
字号:
if (hDef) {
SendMessage (hWnd, MSG_COMMAND, GetDlgCtrlID (hDef), 0L);
return 0;
}
break;
}
case SCANCODE_CURSORBLOCKDOWN:
case SCANCODE_CURSORBLOCKRIGHT:
case SCANCODE_CURSORBLOCKUP:
case SCANCODE_CURSORBLOCKLEFT:
{
HWND hNewFocus;
if (hCurFocus && SendMessage (hCurFocus, MSG_GETDLGCODE, 0, 0L) & DLGC_WANTARROWS)
break;
if (LOWORD (wParam) == SCANCODE_CURSORBLOCKDOWN
|| LOWORD (wParam) == SCANCODE_CURSORBLOCKRIGHT)
hNewFocus = GetNextDlgGroupItem (hWnd, hCurFocus, FALSE);
else
hNewFocus = GetNextDlgGroupItem (hWnd, hCurFocus, TRUE);
if (hNewFocus != hCurFocus) {
if (SendMessage (hCurFocus, MSG_GETDLGCODE, 0, 0L) & DLGC_STATIC)
return 0;
SetFocus (hNewFocus);
// SendMessage (hWnd, MSG_DLG_SETDEFID, GetDlgCtrlID (hNewFocus), 0L);
if (SendMessage (hNewFocus, MSG_GETDLGCODE, 0, 0L)
& DLGC_RADIOBUTTON) {
SendMessage (hNewFocus, BM_CLICK, 0, 0L);
ExcludeWindowStyle (hCurFocus, WS_TABSTOP);
IncludeWindowStyle (hNewFocus, WS_TABSTOP);
}
}
return 0;
}
}
break;
default:
break;
}
return DefaultMainWinProc (hWnd, message, wParam, lParam);
}
int GUIAPI GetDlgCtrlID (HWND hwndCtl)
{
PCONTROL pCtrl = (PCONTROL)hwndCtl;
if (pCtrl) {
return pCtrl->id;
}
return -1;
}
HWND GUIAPI GetDlgItem (HWND hDlg, int nIDDlgItem)
{
PCONTROL pCtrl;
PMAINWIN pMainWin = (PMAINWIN)hDlg;
pCtrl = (PCONTROL)(pMainWin->hFirstChild);
while (pCtrl) {
if (pCtrl->id == nIDDlgItem)
return (HWND)pCtrl;
pCtrl = pCtrl->next;
}
return 0;
}
HWND GUIAPI GetDlgDefPushButton (HWND hWnd)
{
PCONTROL pCtrl;
PMAINWIN pMainWin = (PMAINWIN)hWnd;
pCtrl = (PCONTROL)(pMainWin->hFirstChild);
while (pCtrl) {
if (SendMessage ((HWND)pCtrl,
MSG_GETDLGCODE, 0, 0L) & DLGC_DEFPUSHBUTTON)
return (HWND)pCtrl;
pCtrl = pCtrl->next;
}
return 0;
}
HWND GetNextDlgGroupItem (HWND hDlg, HWND hCtl, BOOL bPrevious)
{
PCONTROL pStartCtrl, pCtrl;
PMAINWIN pMainWin = (PMAINWIN)hDlg;
if (hCtl)
pStartCtrl = (PCONTROL)hCtl;
else {
pStartCtrl = (PCONTROL)(pMainWin->hFirstChild);
if (bPrevious) {
while (pStartCtrl->next) {
pStartCtrl = pStartCtrl->next;
}
}
}
if (bPrevious) {
if (pStartCtrl->dwStyle & WS_GROUP) {
pCtrl = pStartCtrl->next;
while (pCtrl && pCtrl->next) {
if (pCtrl->dwStyle & WS_GROUP)
break;
pCtrl = pCtrl->next;
}
}
else
pCtrl = pStartCtrl;
if (pCtrl->dwStyle & WS_GROUP || pCtrl == pStartCtrl)
pCtrl = pCtrl->prev;
while (pCtrl) {
if (pCtrl->dwStyle & WS_VISIBLE
&& !(pCtrl->dwStyle & WS_DISABLED) )
return (HWND)pCtrl;
pCtrl = pCtrl->prev;
}
}
else {
pCtrl = pStartCtrl->next;
while (pCtrl) {
if ( !(pCtrl->dwStyle & WS_GROUP) ) {
if (pCtrl->dwStyle & WS_VISIBLE
&& !(pCtrl->dwStyle & WS_DISABLED) )
return (HWND)pCtrl;
}
else
break;
pCtrl = pCtrl->next;
}
pCtrl = pStartCtrl->prev;
while (pCtrl) {
if (pCtrl->dwStyle & WS_GROUP) {
if (pCtrl->dwStyle & WS_VISIBLE
&& !(pCtrl->dwStyle & WS_DISABLED) )
return (HWND)pCtrl;
else
break;
}
pCtrl = pCtrl->prev;
}
if (pCtrl) { // pCtrl is the first control in group.
pCtrl = pCtrl->next;
while (pCtrl) {
if ( !(pCtrl->dwStyle & WS_GROUP) ) {
if (pCtrl->dwStyle & WS_VISIBLE
&& !(pCtrl->dwStyle & WS_DISABLED) )
return (HWND)pCtrl;
}
else
break;
pCtrl = pCtrl->next;
}
}
}
return hCtl;
}
HWND GUIAPI GetNextDlgTabItem (HWND hDlg, HWND hCtl, BOOL bPrevious)
{
PCONTROL pFirstCtrl, pLastCtrl, pCtrl;
PMAINWIN pMainWin = (PMAINWIN)hDlg;
pFirstCtrl = pCtrl = (PCONTROL)(pMainWin->hFirstChild);
if (!pCtrl) return hCtl;
while (pCtrl->next) {
pCtrl = pCtrl->next;
}
pLastCtrl = pCtrl;
if (hCtl) {
pCtrl = (PCONTROL)hCtl;
if (bPrevious)
pCtrl = pCtrl->prev;
else
pCtrl = pCtrl->next;
}
else if (bPrevious)
pCtrl = pLastCtrl;
else
pCtrl = pFirstCtrl;
if (bPrevious) {
while (pCtrl) {
if (pCtrl->dwStyle & WS_TABSTOP
&& pCtrl->dwStyle & WS_VISIBLE
&& !(pCtrl->dwStyle & WS_DISABLED) )
return (HWND)pCtrl;
pCtrl = pCtrl->prev;
}
pCtrl = pLastCtrl;
while (pCtrl) {
if (pCtrl->dwStyle & WS_TABSTOP
&& pCtrl->dwStyle & WS_VISIBLE
&& !(pCtrl->dwStyle & WS_DISABLED) )
return (HWND)pCtrl;
pCtrl = pCtrl->prev;
}
}
else {
while (pCtrl) {
if (pCtrl->dwStyle & WS_TABSTOP
&& pCtrl->dwStyle & WS_VISIBLE
&& !(pCtrl->dwStyle & WS_DISABLED) )
return (HWND)pCtrl;
pCtrl = pCtrl->next;
}
pCtrl = pFirstCtrl;
while (pCtrl) {
if (pCtrl->dwStyle & WS_TABSTOP
&& pCtrl->dwStyle & WS_VISIBLE
&& !(pCtrl->dwStyle & WS_DISABLED) )
return (HWND)pCtrl;
pCtrl = pCtrl->next;
}
}
return hCtl;
}
int GUIAPI SendDlgItemMessage (HWND hDlg, int nIDDlgItem,
int message, WPARAM wParam, LPARAM lParam)
{
HWND hCtrl;
hCtrl = GetDlgItem (hDlg, nIDDlgItem);
if (hCtrl)
return SendMessage (hCtrl, message, wParam, lParam);
return -1;
}
UINT GUIAPI GetDlgItemInt (HWND hDlg, int nIDDlgItem, BOOL *lpTranslated,
BOOL bSigned)
{
HWND hCtrl;
char buffer [101];
unsigned long int result;
if ( !(hCtrl = GetDlgItem (hDlg, nIDDlgItem)))
goto error;
if (SendMessage (hCtrl, MSG_GETTEXT, 100, (LPARAM)buffer) == 0)
goto error;
if (bSigned)
result = strtoul (buffer, NULL, 0);
else
result = (unsigned long int)strtol (buffer, NULL, 0);
if (lpTranslated)
*lpTranslated = TRUE;
return (UINT)result;
error:
if (lpTranslated)
*lpTranslated = FALSE;
return 0;
}
BOOL GUIAPI SetDlgItemInt (HWND hDlg, int nIDDlgItem, UINT uValue,
BOOL bSigned)
{
HWND hCtrl;
char buffer [101];
if ( !(hCtrl = GetDlgItem (hDlg, nIDDlgItem)))
return FALSE;
if (bSigned)
snprintf (buffer, 100, "%ld", (long)uValue);
else
snprintf (buffer, 100, "%u", uValue);
buffer [100] = '\0';
return SendMessage (hCtrl, MSG_SETTEXT, 0, (LPARAM)buffer) == 0;
}
int GUIAPI GetDlgItemText (HWND hDlg, int nIDDlgItem, char* lpString,
int nMaxCount)
{
HWND hCtrl;
if ( !(hCtrl = GetDlgItem (hDlg, nIDDlgItem)))
return 0;
return SendMessage (hCtrl,
MSG_GETTEXT, (WPARAM)nMaxCount, (LPARAM)lpString);
}
char* GUIAPI GetDlgItemText2 (HWND hDlg, int id, int* lenPtr)
{
int len;
char* buff;
len = SendDlgItemMessage (hDlg, id,
MSG_GETTEXTLENGTH, 0, 0L);
if (len > 0) {
buff = malloc (len + 1);
if (buff)
SendDlgItemMessage (hDlg, id,
MSG_GETTEXT, len, (LPARAM)(buff));
}
else
buff = NULL;
if (lenPtr) *lenPtr = len;
return buff;
}
BOOL GUIAPI SetDlgItemText (HWND hDlg, int nIDDlgItem, const char* lpString)
{
HWND hCtrl;
if ( !(hCtrl = GetDlgItem (hDlg, nIDDlgItem)))
return FALSE;
return SendMessage (hCtrl,
MSG_SETTEXT, 0, (LPARAM)lpString) == 0;
}
#ifdef _CTRL_BUTTON
void GUIAPI CheckDlgButton (HWND hDlg, int nIDDlgItem, int nCheck)
{
HWND hCtrl;
int DlgCode;
if ( !(hCtrl = GetDlgItem (hDlg, nIDDlgItem)))
return;
DlgCode = SendMessage (hCtrl, MSG_GETDLGCODE, 0, 0L);
if (DlgCode & DLGC_BUTTON)
SendMessage (hCtrl, BM_SETCHECK, nCheck?BST_CHECKED:BST_UNCHECKED, 0L);
else if (DlgCode & DLGC_3STATE) {
SendMessage (hCtrl, BM_SETCHECK, nCheck, 0L);
}
}
void GUIAPI CheckRadioButton (HWND hDlg,
int idFirstButton, int idLastButton, int idCheckButton)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -