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

📄 dialog.c

📁 这是针对 Linux (i386)平台的 minigui 3.6.2 开发包(MiniGUI-Processes 运行模式)。
💻 C
📖 第 1 页 / 共 3 页
字号:
/*** $Id: dialog.c,v 1.41 2004/08/12 09:35:37 snig Exp $**** dialog.c: The Dialog module.**** Copyright (C) 2003 Feynman Software.** Copyright (C) 1999 ~ 2002 Wei Yongming.**** Current maintainer: Wei Yongming.**** Create date: 1999.09.10*//*** This program is free software; you can redistribute it and/or modify** it under the terms of the GNU General Public License as published by** the Free Software Foundation; either version 2 of the License, or** (at your option) any later version.**** This program is distributed in the hope that it will be useful,** but WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the** GNU General Public License for more details.**** You should have received a copy of the GNU General Public License** along with this program; if not, write to the Free Software** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include "common.h"#include "minigui.h"#include "gdi.h"#include "window.h"#include "control.h"#include "cliprect.h"#include "gal.h"#include "internals.h"#include "ctrlclass.h"void GUIAPI DestroyAllControls (HWND hDlg){    PMAINWIN pDlg = (PMAINWIN)hDlg;    PCONTROL pCtrl = (PCONTROL)(pDlg->hFirstChild);    PCONTROL pNext;    while (pCtrl) {        pNext = pCtrl->next;        DestroyWindow ((HWND)pCtrl);        pCtrl = pNext;    }}#define dlgDestroyAllControls   DestroyAllControlsHWND GUIAPI CreateMainWindowIndirectParam (PDLGTEMPLATE pDlgTemplate,                     HWND hOwner, WNDPROC WndProc, LPARAM lParam){    MAINWINCREATE CreateInfo;    HWND hMainWin;    int i;    PCTRLDATA pCtrlData;    HWND hCtrl;    HWND hFocus;    if (pDlgTemplate->controlnr > 0 && !pDlgTemplate->controls)        return HWND_INVALID;    hOwner = GetMainWindowHandle (hOwner);    CreateInfo.dwReserved     = pDlgTemplate->dwAddData;    CreateInfo.dwStyle        = pDlgTemplate->dwStyle & ~WS_VISIBLE;    CreateInfo.dwExStyle      = pDlgTemplate->dwExStyle;    CreateInfo.spCaption      = pDlgTemplate->caption;    CreateInfo.hMenu          = pDlgTemplate->hMenu;    CreateInfo.hCursor        = GetSystemCursor (IDC_ARROW);    CreateInfo.hIcon          = pDlgTemplate->hIcon;    CreateInfo.MainWindowProc = WndProc ? WndProc : DefaultMainWinProc;    CreateInfo.lx             = pDlgTemplate->x;    CreateInfo.ty             = pDlgTemplate->y;    CreateInfo.rx             = pDlgTemplate->x + pDlgTemplate->w;    CreateInfo.by             = pDlgTemplate->y + pDlgTemplate->h;    CreateInfo.iBkColor       = GetWindowElementColor (BKC_DIALOG);    CreateInfo.dwAddData      = pDlgTemplate->dwAddData;    CreateInfo.hHosting       = hOwner;        hMainWin = CreateMainWindow (&CreateInfo);    if (hMainWin == HWND_INVALID)        return HWND_INVALID;    for (i = 0; i < pDlgTemplate->controlnr; i++) {        pCtrlData = pDlgTemplate->controls + i;        hCtrl = CreateWindowEx (pCtrlData->class_name,                              pCtrlData->caption,                              pCtrlData->dwStyle | WS_CHILD,                              pCtrlData->dwExStyle,                              pCtrlData->id,                              pCtrlData->x,                              pCtrlData->y,                              pCtrlData->w,                              pCtrlData->h,                              hMainWin,                              pCtrlData->dwAddData);                                      if (hCtrl == HWND_INVALID) {            dlgDestroyAllControls (hMainWin);            DestroyMainWindow (hMainWin);            MainWindowThreadCleanup (hMainWin);            return HWND_INVALID;        }    }    hFocus = GetNextDlgTabItem (hMainWin, (HWND)0, FALSE);    if (SendMessage (hMainWin, MSG_INITDIALOG, hFocus, lParam)) {        if (hFocus)            SetFocus (hFocus);    }        ShowWindow (hMainWin, SW_SHOWNORMAL);        return hMainWin;}BOOL GUIAPI DestroyMainWindowIndirect (HWND hMainWin){    dlgDestroyAllControls (hMainWin);    DestroyMainWindow (hMainWin);    ThrowAwayMessages (hMainWin);    MainWindowThreadCleanup (hMainWin);    return TRUE;}int GUIAPI DialogBoxIndirectParam (PDLGTEMPLATE pDlgTemplate,                     HWND hOwner, WNDPROC DlgProc, LPARAM lParam){    MAINWINCREATE CreateInfo;    HWND hDlg;    int  retCode = IDCANCEL;    HWND hFocus;    MSG Msg;    int isActive;    if (pDlgTemplate->controlnr > 0 && !pDlgTemplate->controls)        return -1;    hOwner = GetMainWindowHandle (hOwner);    //CreateInfo.dwReserved = pDlgTemplate->dwAddData;    CreateInfo.dwReserved     = (DWORD)pDlgTemplate;        CreateInfo.dwStyle        = pDlgTemplate->dwStyle & ~WS_VISIBLE;    CreateInfo.dwExStyle      = pDlgTemplate->dwExStyle;    CreateInfo.spCaption      = pDlgTemplate->caption;    CreateInfo.hMenu          = pDlgTemplate->hMenu;    CreateInfo.hCursor        = GetSystemCursor (IDC_ARROW);    CreateInfo.hIcon          = pDlgTemplate->hIcon;    CreateInfo.MainWindowProc = DlgProc;    CreateInfo.lx             = pDlgTemplate->x;    CreateInfo.ty             = pDlgTemplate->y;    CreateInfo.rx             = pDlgTemplate->x + pDlgTemplate->w;    CreateInfo.by             = pDlgTemplate->y + pDlgTemplate->h;    CreateInfo.iBkColor       = GetWindowElementColor (BKC_DIALOG);    //CreateInfo.dwAddData      = (DWORD)pDlgTemplate;    CreateInfo.dwAddData      = (DWORD)pDlgTemplate->dwAddData;    CreateInfo.hHosting       = hOwner;        hDlg = CreateMainWindow (&CreateInfo);    if (hDlg == HWND_INVALID)        return -1;    SetWindowAdditionalData2 (hDlg, (DWORD)(&retCode));    if (hOwner)        EnableWindow (hOwner, FALSE);        hFocus = GetNextDlgTabItem (hDlg, (HWND)0, FALSE);    if (SendMessage (hDlg, MSG_INITDIALOG, hFocus, lParam)) {        if (hFocus)            SetFocus (hFocus);    }        ShowWindow (hDlg, SW_SHOWNORMAL);        while( GetMessage (&Msg, hDlg) ) {        TranslateMessage (&Msg);        DispatchMessage (&Msg);    }    isActive = (GetActiveWindow() == hDlg);    dlgDestroyAllControls (hDlg);    DestroyMainWindow (hDlg);    ThrowAwayMessages (hDlg);    MainWindowThreadCleanup (hDlg);        if (hOwner) {        EnableWindow (hOwner, TRUE);        if(isActive)        {            ShowWindow (hOwner, SW_SHOWNORMAL);            SetActiveWindow (hOwner);        }    }    return retCode;}BOOL GUIAPI EndDialog (HWND hDlg, int endCode){    DWORD dwAddData2;    dwAddData2 = GetWindowAdditionalData2 (hDlg);    if (dwAddData2 == 0)        return FALSE;    *((int *)(dwAddData2)) = endCode;    PostQuitMessage (hDlg);    return TRUE;}int GUIAPI DefaultDialogProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam){    HWND hCurFocus;    switch (message) {    case MSG_CREATE:    {        int i;        PCTRLDATA pCtrlData;        HWND hCtrl;                    /*        PDLGTEMPLATE pDlgTmpl                     = (PDLGTEMPLATE)(((PMAINWINCREATE)lParam)->dwAddData);        */        PDLGTEMPLATE pDlgTmpl                     = (PDLGTEMPLATE)(((PMAINWINCREATE)lParam)->dwReserved);                    for (i = 0; i < pDlgTmpl->controlnr; i++) {            pCtrlData = pDlgTmpl->controls + i;            if (pCtrlData->class_name) {                hCtrl = CreateWindowEx (pCtrlData->class_name,                              pCtrlData->caption,                              pCtrlData->dwStyle | WS_CHILD,                              pCtrlData->dwExStyle,                              pCtrlData->id,                              pCtrlData->x,                              pCtrlData->y,                              pCtrlData->w,                              pCtrlData->h,                              hWnd,                              pCtrlData->dwAddData);            }            else                break;                                          if (hCtrl == HWND_INVALID) {                dlgDestroyAllControls (hWnd);                return -1;            }        }        /* set back dwAddData to be the value from dialog template */        //SetWindowAdditionalData (hWnd, pDlgTmpl->dwAddData);        return 0;    }    case MSG_DLG_GETDEFID:    {        HWND hDef;        hDef = GetDlgDefPushButton (hWnd);        if (hDef)            return GetDlgCtrlID (hDef);        return 0;    }        case MSG_DLG_SETDEFID:    {        HWND hOldDef;        HWND hNewDef;        hNewDef = GetDlgItem (hWnd, wParam);        if (SendMessage (hNewDef, MSG_GETDLGCODE, 0, 0L) & DLGC_PUSHBUTTON) {            hOldDef = GetDlgDefPushButton (hWnd);            if (hOldDef) {                ExcludeWindowStyle (hOldDef, BS_DEFPUSHBUTTON);                InvalidateRect (hOldDef, NULL, TRUE);            }            IncludeWindowStyle (hNewDef, BS_DEFPUSHBUTTON);            InvalidateRect (hNewDef, NULL, TRUE);            return (int)hOldDef;        }        break;    }            case MSG_COMMAND:        if (wParam == IDCANCEL) {            HWND hCancel;                        hCancel = GetDlgItem (hWnd, IDCANCEL);            if (hCancel && IsWindowEnabled (hCancel)                     && IsWindowVisible (hCancel))                EndDialog (hWnd, IDCANCEL);            else                Ping ();        }        break;    case MSG_CLOSE:    {        HWND hCancel;        hCancel = GetDlgItem (hWnd, IDCANCEL);        if (hCancel && IsWindowEnabled (hCancel)                     && IsWindowVisible (hCancel))            EndDialog (hWnd, IDCANCEL);        else            Ping ();        return 0;    }    case MSG_KEYDOWN:        if ((hCurFocus = GetFocusChild (hWnd))                 && SendMessage (hCurFocus, MSG_GETDLGCODE, 0, 0L) & DLGC_WANTALLKEYS)            break;        switch (wParam) {        case SCANCODE_ESCAPE:            SendMessage (hWnd, MSG_COMMAND, IDCANCEL, 0L);            return 0;        case SCANCODE_TAB:        {            HWND hNewFocus;                            if (hCurFocus && SendMessage (hCurFocus, MSG_GETDLGCODE, 0, 0L) & DLGC_WANTTAB)                break;            if (lParam & KS_SHIFT)                hNewFocus = GetNextDlgTabItem (hWnd, hCurFocus, TRUE);            else                hNewFocus = GetNextDlgTabItem (hWnd, hCurFocus, FALSE);            if (hNewFocus != hCurFocus) {                SetFocus (hNewFocus);//                SendMessage (hWnd, MSG_DLG_SETDEFID, GetDlgCtrlID (hNewFocus), 0L);            }            return 0;        }        case SCANCODE_ENTER:        {            HWND hDef;            if (hCurFocus && SendMessage (hCurFocus, MSG_GETDLGCODE, 0, 0L) & DLGC_WANTENTER)                break;            if (SendMessage (hCurFocus, MSG_GETDLGCODE, 0, 0L) & DLGC_PUSHBUTTON)                break;            hDef = GetDlgDefPushButton (hWnd);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -