⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialog.c

📁 在ADS环境下MiniGUI的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
            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 + -