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

📄 accelkey.c

📁 linux下的图形界面开发minigui最新源代码
💻 C
字号:
/*** $Id: accelkey.c,v 1.11 2003/09/04 03:15:07 weiym Exp $**** accelkey.c: The Accelerator module.**** Copyright (C) 2003 Feynman Software.** Copyright (C) 1999 ~ 2002 Kang Xiaoning and Wei Yongming.**** Current maintainer: Wei Yongming.** Create date: 1999.04.19*//*** 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*//*** TODO:*/ #include <stdio.h>#include <stdlib.h>#include "common.h"#include "minigui.h"#include "gdi.h"#include "window.h"#include "cliprect.h"#include "gal.h"#include "internals.h"#include "blockheap.h"#include "accelkey.h"static BLOCKHEAP ACHeap;// acceltable construction inline static void InitFreeACList (void){    InitBlockDataHeap (&ACHeap, sizeof (ACCELTABLE), SIZE_AC_HEAP);}inline static PACCELTABLE AccelTableAlloc (void){    return (PACCELTABLE) BlockDataAlloc (&ACHeap);}inline static void FreeAccelTable (PACCELTABLE pac){    BlockDataFree (&ACHeap, pac);}inline static void DestroyFreeACList (void){    DestroyBlockDataHeap (&ACHeap);}// accelkey item routeline static BLOCKHEAP AIHeap;inline static void InitFreeAIList (void){    InitBlockDataHeap (&AIHeap, sizeof (ACCELITEM), SIZE_AI_HEAP);}inline static PACCELITEM AccelItemAlloc (void){    return (PACCELITEM) BlockDataAlloc (&AIHeap);}inline static void FreeAccelItem (ACCELITEM* pai){    BlockDataFree (&AIHeap, pai);}inline static void DestroyFreeAIList (void){    DestroyBlockDataHeap (&AIHeap);}BOOL InitAccel (void){    InitFreeACList ();    InitFreeAIList ();    return TRUE;}void TerminateAccel (void){    DestroyFreeACList ();    DestroyFreeAIList ();}/*********  Interfaces  ************************************/HACCEL GUIAPI LoadAccelerators (const char* filename, int id){    return 0;}HACCEL GUIAPI CreateAcceleratorTable (HWND hWnd){    PACCELTABLE pac;    if (!(pac = AccelTableAlloc ()))        return 0;        pac->category = TYPE_HACCEL;    pac->hwnd = hWnd;    pac->head = NULL;    return (HACCEL)pac;}int GUIAPI IsAccel (HACCEL hac){    PACCELTABLE pAcc = (PACCELTABLE)hac;    if (pAcc->category != TYPE_HACCEL) return 0;    return TRUE;}int GUIAPI DestroyAcceleratorTable (HACCEL hacc){    PACCELTABLE pac;    PACCELITEM pai, ptmpai;    pac = (PACCELTABLE) hacc;    if (pac->category != TYPE_HACCEL)        return ERR_INVALID_HANDLE;        pai = pac->head;    while (pai) {        ptmpai = pai->next;        FreeAccelItem (pai);        pai = ptmpai;    }    FreeAccelTable (pac);    return 0;}static PACCELITEM *accFindMatchAccelKeys (HACCEL hacc, int key, DWORD keymask){    PACCELITEM  pai;    PACCELTABLE pacc = (PACCELTABLE) hacc;    pai = pacc -> head;    if (pai) {        if (pai -> key == key && pai -> keymask == keymask)             return &(pacc->head);        else {            while (pai -> next) {                if (pai -> next ->key == key && pai -> next -> keymask == keymask)                    return &(pai->next) ;                pai = pai ->next;            }        }    }    return NULL;} int GUIAPI AddAccelerators (HACCEL hacc, int key, DWORD keymask, WPARAM wParam , LPARAM lParam){    PACCELTABLE pac;    PACCELITEM pnewai;    pac = (PACCELTABLE) hacc;    if (pac->category != TYPE_HACCEL)        return ERR_INVALID_HANDLE;     if (accFindMatchAccelKeys (hacc, key, keymask))       return  ERR_ALREADY_EXIST;    if (!(pnewai = AccelItemAlloc ()))         return ERR_RES_ALLOCATION;    pnewai->key     = key;    pnewai->keymask = keymask;    pnewai->wParam  = wParam;      pnewai->lParam  = lParam;    pnewai->next    = pac->head ;    pac->head       = pnewai ;    return 0;}int GUIAPI DeleteAccelerators (HACCEL hacc,int key, DWORD keymask){    PACCELTABLE pac;    PACCELITEM *ptempac;    PACCELITEM ptempac1;    pac = (PACCELTABLE) hacc;    if (pac -> category != TYPE_HACCEL)        return ERR_INVALID_HANDLE;    if (!(ptempac=accFindMatchAccelKeys(hacc,key, keymask)))        return ERR_NO_MATCH;    ptempac1= ((*ptempac)->next);    FreeAccelItem (*ptempac);    (*ptempac) = ptempac1;     return 0;  }HACCEL GUIAPI CopyAcceleratorTable (HACCEL hacc){    HACCEL hac;    PACCELTABLE pac = (PACCELTABLE)hacc;    PACCELITEM pai;    if ((hac = (HACCEL) CreateAcceleratorTable (pac->hwnd))) {        pai = pac -> head;        while (pai) {            if (AddAccelerators (hac, pai->key, pai->keymask, pai->wParam, pai->lParam)) {                DestroyAcceleratorTable(hac);                return (HACCEL) NULL;            }            pai = pai -> next;                             }        return hac;    }    else        return (HACCEL) NULL; }int GUIAPI TranslateAccelerator (HWND hWnd, HACCEL hAccel, PMSG pMsg){    PACCELTABLE pac;    PACCELITEM  *pai;    int key;    pac = (PACCELTABLE) hAccel;    if (pac->hwnd != hWnd)        return ERR_BAD_OWNER;    if (pMsg->message == MSG_KEYDOWN || pMsg->message == MSG_SYSKEYDOWN)        key = pMsg->wParam | 256;    else if (pMsg->message == MSG_CHAR || pMsg->message == MSG_SYSCHAR)        key = pMsg->wParam & 255;    else         return ERR_NO_MATCH;    if ((pai = accFindMatchAccelKeys (hAccel, key, pMsg->lParam))) {        if (pMsg->message == MSG_SYSKEYDOWN || pMsg->message == MSG_SYSCHAR)            return SendNotifyMessage (hWnd,                             MSG_SYSCOMMAND, (*pai)->wParam, (*pai)->lParam);        else             return SendNotifyMessage (hWnd,                            MSG_COMMAND, (*pai)->wParam , (*pai)->lParam);    }    else         return ERR_NO_MATCH;}

⌨️ 快捷键说明

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