亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? message.c

?? 這是針對 Linux (i386)平臺的 minigui 3.6.2 開發包(MiniGUI-Processes 運行模式)。
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*** $Id: message.c,v 1.22.6.1 2005/02/15 08:27:56 weiym Exp $**** message.c: The Messaging module.**** Copyright (C) 2003 Feynman Software.** Copyright (C) 2000 ~ 2002 Wei Yongming.**** Current maintainer: Wei Yongming.**** Create date: 2000/11/05*//*** 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 <string.h>#include "common.h"#include "minigui.h"#include "gdi.h"#include "window.h"#include "blockheap.h"#include "cliprect.h"#include "gal.h"#include "internals.h"#include "ctrlclass.h"#include "timer.h"/****************************** Message support ******************************/static BLOCKHEAP QMSGHeap;/* QMSG allocation */BOOL InitFreeQMSGList (void){    InitBlockDataHeap (&QMSGHeap, sizeof (QMSG), SIZE_QMSG_HEAP);    return TRUE;}void DestroyFreeQMSGList (void){    DestroyBlockDataHeap (&QMSGHeap);}inline static PQMSG QMSGAlloc (void){    return (PQMSG) BlockDataAlloc (&QMSGHeap);}inline static void FreeQMSG (PQMSG pqmsg){    BlockDataFree (&QMSGHeap, pqmsg);}BOOL InitMsgQueue (PMSGQUEUE pMsgQueue, int iBufferLen){    int i;        pMsgQueue->dwState = QS_EMPTY;#ifndef _LITE_VERSION    pthread_mutex_init (&pMsgQueue->lock, NULL);    sem_init (&pMsgQueue->wait, 0, 0);#endif    pMsgQueue->pFirstNotifyMsg = NULL;    pMsgQueue->pLastNotifyMsg = NULL;    pMsgQueue->readpos = 0;    pMsgQueue->writepos = 0;#ifndef _LITE_VERSION    pMsgQueue->pFirstSyncMsg = NULL;    pMsgQueue->pLastSyncMsg = NULL;#endif    if (iBufferLen <= 0)        iBufferLen = DEF_MSGQUEUE_LEN;            pMsgQueue->msg = malloc (sizeof (MSG) * iBufferLen);    pMsgQueue->len = iBufferLen;#ifndef _LITE_VERSION    pMsgQueue->TimerMask = 0xFF;#else    pMsgQueue->TimerMask = 0xFFFF;#endif    for (i = 0; i < DEF_NR_TIMERS; i++) {        pMsgQueue->TimerOwner [i] = HWND_DESKTOP;        pMsgQueue->TimerID [i] = 0;    }    return pMsgQueue->msg != NULL;}void DestroyMsgQueue (PMSGQUEUE pMsgQueue){    PQMSG head;    PQMSG next;    head = next = pMsgQueue->pFirstNotifyMsg;    while (head) {        next = head->next;        FreeQMSG (head);        head = next;    }#ifndef _LITE_VERSION    pthread_mutex_destroy (&pMsgQueue->lock);    sem_destroy (&pMsgQueue->wait);#endif    free (pMsgQueue->msg);    pMsgQueue->msg = NULL;}#ifdef _LITE_VERSIONBOOL InitDskMsgQueue (void){    return InitMsgQueue (&__mg_dsk_msgs, 0);}void DestroyDskMsgQueue (void){    DestroyMsgQueue (&__mg_dsk_msgs);}#endifPMAINWIN CheckAndGetMainWindowPtr (HWND hWnd){    PMAINWIN pWin;    pWin = (PMAINWIN)hWnd;    if(pWin->DataType != TYPE_HWND)        return NULL;    if (pWin->WinType == TYPE_MAINWIN)        return pWin;    return NULL; }PMAINWIN GetMainWindowPtrOfControl (HWND hWnd){    PMAINWIN pWin;    if (hWnd == HWND_DESKTOP || hWnd == HWND_INVALID)        return NULL;    pWin = (PMAINWIN)hWnd;    if(pWin->DataType != TYPE_HWND)        return NULL;    if (pWin->WinType == TYPE_MAINWIN)        return pWin;    return ((PCONTROL)hWnd)->pMainWin;}PMSGQUEUE GetMsgQueue (HWND hWnd){    if (hWnd == HWND_DESKTOP) return &__mg_dsk_msgs;    return GetMainWindowPtrOfControl (hWnd)->pMessages;}static inline WNDPROC GetWndProc (HWND hWnd){     PMAINWIN  pMainWin = (PMAINWIN)hWnd;     if (hWnd == HWND_DESKTOP)         return DesktopWinProc;     return pMainWin->MainWindowProc;}static HWND msgCheckInvalidRegion (PMAINWIN pWin){    PCONTROL pCtrl = (PCONTROL)pWin;    HWND hwnd;    if (pCtrl->InvRgn.rgn.head)        return (HWND)pCtrl;    pCtrl = pCtrl->children;    while (pCtrl) {        if ((hwnd = msgCheckInvalidRegion ((PMAINWIN) pCtrl)))            return hwnd;        pCtrl = pCtrl->next;    }    return 0;}static PMAINWIN msgGetHostingRoot (PMAINWIN pHosted){    PMAINWIN pHosting;        pHosting = pHosted->pHosting;    if (pHosting)        return msgGetHostingRoot (pHosting);    return pHosted;}static HWND msgCheckHostedTree (PMAINWIN pHosting){    HWND hNeedPaint;    PMAINWIN pHosted;    if ( (hNeedPaint = msgCheckInvalidRegion (pHosting)) )        return hNeedPaint;    pHosted = pHosting->pFirstHosted;    while (pHosted) {        if ( (hNeedPaint = msgCheckHostedTree (pHosted)) )            return hNeedPaint;        pHosted = pHosted->pNextHosted;    }    return 0;}static void CheckCapturedMouseMessage (PMSG pMsg){    if (pMsg->message >= MSG_FIRSTMOUSEMSG             && pMsg->message <= MSG_LASTMOUSEMSG) {#ifndef _LITE_VERSION        if (__mg_capture_wnd && (__mg_capture_wnd != HWND_INVALID)                && (GetMsgQueue (__mg_capture_wnd) == GetMsgQueue (pMsg->hwnd))) {#else        if (__mg_capture_wnd && (__mg_capture_wnd != HWND_INVALID)                 && pMsg->hwnd != HWND_DESKTOP) {#endif            if (!(pMsg->wParam | KS_CAPTURED)) {                int x, y;                x = LOSWORD (pMsg->lParam);                y = HISWORD (pMsg->lParam);                ClientToScreen (pMsg->hwnd, &x, &y);                pMsg->lParam = MAKELONG (x, y);                pMsg->wParam |= KS_CAPTURED;            }            pMsg->hwnd = __mg_capture_wnd;        }    }}BOOL GUIAPI HavePendingMessage (HWND hWnd){    PMSGQUEUE pMsgQueue;    if( !(pMsgQueue = GetMsgQueue(hWnd)) ) return FALSE;        if (pMsgQueue->dwState & QS_NOTIFYMSG) {        if (pMsgQueue->pFirstNotifyMsg)            return TRUE;    }#ifndef _LITE_VERSION    if (pMsgQueue->dwState & QS_SYNCMSG) {        if (pMsgQueue->pFirstSyncMsg)            return TRUE;    }#endif    if (pMsgQueue->dwState & QS_POSTMSG) {        if (pMsgQueue->readpos != pMsgQueue->writepos)            return TRUE;    }#ifndef _LITE_VERSION    if (pMsgQueue->dwState & (QS_QUIT | QS_PAINT | QS_TIMER))#else    if (pMsgQueue->dwState & (QS_QUIT | QS_PAINT | QS_TIMER | QS_DESKTIMER))#endif        return TRUE;#ifdef _LITE_VERSION    return pMsgQueue->OnIdle (NULL);#else    return FALSE;#endif}int GUIAPI BroadcastMessage (int iMsg, WPARAM wParam, LPARAM lParam){    MSG msg;        msg.message = iMsg;    msg.wParam = wParam;    msg.lParam = lParam;    return SendMessage (HWND_DESKTOP, MSG_BROADCASTMSG, 0, (LPARAM)(&msg));}#ifdef _MSG_STRING#include "msgstr.h"const char* GUIAPI Message2Str (int message){    if (message >= 0x0000 && message <= 0x006F)        return msgstr1 [message];    else if (message >= 0x00A0 && message <= 0x010F)        return msgstr2 [message - 0x00A0];    else if (message >= 0x0120 && message <= 0x017F)        return msgstr3 [message - 0x0120];    else if (message >= 0xF000)        return "Control Messages";    else        return "MSG_USER";}void GUIAPI PrintMessage (FILE* fp, HWND hWnd, int iMsg, WPARAM wParam, LPARAM lParam){    fprintf (fp, "Message %s: hWnd: %#x, wP: %x, lP: %lx.\n",        Message2Str (iMsg), hWnd, wParam, lParam);}#endif#ifdef _LITE_VERSIONint GUIAPI GetMessage (PMSG pMsg, HWND hWnd){    PMSGQUEUE pMsgQueue;    PQMSG phead;    int slot;    if( !(pMsgQueue = GetMsgQueue(hWnd)) ) return ERR_INV_HWND;    memset (pMsg, 0, sizeof(MSG));checkagain:    if (pMsgQueue->dwState & QS_QUIT) {        pMsg->hwnd = hWnd;        pMsg->message = MSG_QUIT;        pMsg->wParam = 0;        pMsg->lParam = 0;        pMsgQueue->dwState &= ~QS_QUIT;                return 0;    }    if (pMsgQueue->dwState & QS_NOTIFYMSG) {               if (pMsgQueue->pFirstNotifyMsg) {            phead = pMsgQueue->pFirstNotifyMsg;            pMsgQueue->pFirstNotifyMsg = phead->next;                        *pMsg = phead->Msg;            FreeQMSG (phead);            return 1;        }        else            pMsgQueue->dwState &= ~QS_NOTIFYMSG;            }    if (pMsgQueue->dwState & QS_POSTMSG) {            if (pMsgQueue->readpos != pMsgQueue->writepos) {            *pMsg = pMsgQueue->msg[pMsgQueue->readpos];            CheckCapturedMouseMessage (pMsg);            pMsgQueue->readpos++;            if (pMsgQueue->readpos >= pMsgQueue->len) pMsgQueue->readpos = 0;            return 1;        }        else            pMsgQueue->dwState &= ~QS_POSTMSG;    }    if (pMsgQueue->dwState & QS_PAINT) {        PMAINWIN pHostingRoot;        HWND hNeedPaint;        PMAINWIN pWin;                if (hWnd == HWND_DESKTOP) {            pMsg->hwnd = hWnd;            pMsg->message = MSG_PAINT;            pMsg->wParam = 0;            pMsg->lParam = 0;            pMsgQueue->dwState &= ~QS_PAINT;            return 1;        }        pMsg->message = MSG_PAINT;        pMsg->wParam = 0;        pMsg->lParam = 0;        pWin = GetMainWindowPtrOfControl (hWnd);        pHostingRoot = msgGetHostingRoot (pWin);        if ( (hNeedPaint = msgCheckHostedTree (pHostingRoot)) ) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品一区二区三区在线观看| 国产成人精品综合在线观看| 欧美性感一区二区三区| 亚洲自拍欧美精品| 欧美久久一区二区| 日韩成人免费在线| 久久网这里都是精品| 高清久久久久久| 亚洲色图.com| 91精品午夜视频| 国产九色sp调教91| 亚洲三级电影网站| 欧美日韩国产一区| 韩国精品久久久| 成人欧美一区二区三区小说| 色丁香久综合在线久综合在线观看| 亚洲综合激情网| 欧美精品一区二区三区很污很色的 | 久久九九国产精品| 成人a区在线观看| 性做久久久久久| 久久久影视传媒| 在线欧美日韩国产| 国产在线精品不卡| 亚洲一线二线三线视频| 久久综合99re88久久爱| 成人av午夜电影| 偷拍一区二区三区| 久久精品网站免费观看| 91官网在线免费观看| 精品一区二区在线看| 亚洲色图制服丝袜| 精品99久久久久久| 色就色 综合激情| 国产在线一区观看| 亚洲高清久久久| 欧美—级在线免费片| 欧美久久久久久久久| 成人一区二区三区视频在线观看| 亚洲综合区在线| 中文字幕av资源一区| 91精品国产麻豆国产自产在线| 国产成人在线色| 免费人成在线不卡| 亚洲免费观看视频| 欧美激情中文不卡| 日韩欧美高清在线| 欧美喷潮久久久xxxxx| 99精品热视频| 高清免费成人av| 久久不见久久见中文字幕免费| 亚洲黄色录像片| 国产精品久久二区二区| 精品国产乱码91久久久久久网站| 欧美日韩精品一区二区在线播放| 成人丝袜高跟foot| 国产精品一二三在| 久久超级碰视频| 日韩精品五月天| 亚洲电影一区二区| 一区二区视频免费在线观看| 欧美高清在线一区| 久久九九全国免费| 欧美精品一区二区三区在线 | 欧美一区午夜视频在线观看| 色婷婷av一区二区三区之一色屋| 成人禁用看黄a在线| 国产精品自拍一区| 久久99热这里只有精品| 日本女人一区二区三区| 奇米影视一区二区三区小说| 日本中文一区二区三区| 视频一区在线播放| 视频在线观看91| 日韩1区2区3区| 日韩精品久久久久久| 日本中文在线一区| 久久不见久久见免费视频7| 狂野欧美性猛交blacked| 捆绑调教一区二区三区| 国产麻豆一精品一av一免费 | 亚洲精品中文在线| 一区二区三区四区激情| 亚洲裸体xxx| 亚洲综合视频网| 三级精品在线观看| 老鸭窝一区二区久久精品| 久久成人免费网| 丁香啪啪综合成人亚洲小说| 成人av动漫网站| 色偷偷成人一区二区三区91| 在线精品亚洲一区二区不卡| 欧美唯美清纯偷拍| 日韩视频一区二区在线观看| 日韩午夜电影av| 久久综合99re88久久爱| 国产精品私人影院| 亚洲情趣在线观看| 日韩中文欧美在线| 国产精品一区二区无线| 99久久久精品免费观看国产蜜| 在线免费观看日本一区| 日韩手机在线导航| 欧美国产欧美综合| 亚洲va欧美va人人爽午夜| 日本vs亚洲vs韩国一区三区| 亚洲 欧美综合在线网络| 寂寞少妇一区二区三区| 18欧美亚洲精品| 亚洲第一福利视频在线| 9191成人精品久久| 欧美一级黄色录像| 国产欧美日韩在线看| 夜夜操天天操亚洲| 精品一区二区在线观看| 97se亚洲国产综合自在线不卡| 色哟哟精品一区| 欧美成人性战久久| 亚洲欧美日韩国产另类专区 | 亚洲国产精品久久不卡毛片 | 国产美女一区二区| 精品视频在线免费| 国产日韩av一区| 午夜视频在线观看一区| 国产91精品久久久久久久网曝门| 欧美亚洲国产一区在线观看网站| 久久综合色一综合色88| 亚洲一区免费视频| 懂色中文一区二区在线播放| 欧美精品三级在线观看| 国产精品午夜电影| 污片在线观看一区二区| 不卡的av电影| 久久久久亚洲蜜桃| 日韩精品成人一区二区三区 | 欧美乱妇20p| 亚洲欧美在线视频| 国产真实乱对白精彩久久| 欧美日韩色综合| 亚洲特黄一级片| 风间由美性色一区二区三区| 日韩亚洲欧美高清| 亚洲一级二级在线| 高清成人在线观看| 精品噜噜噜噜久久久久久久久试看 | 亚洲欧美偷拍另类a∨色屁股| 精品一区二区三区免费观看| 欧美美女一区二区| 亚洲尤物在线视频观看| av在线不卡网| 国产色婷婷亚洲99精品小说| 麻豆91小视频| 91精品国产乱码| 午夜激情综合网| 欧美三片在线视频观看| 亚洲天堂精品视频| 91社区在线播放| 亚洲欧洲日本在线| 99久久国产综合精品麻豆| 国产拍揄自揄精品视频麻豆| 国内不卡的二区三区中文字幕| 欧美va亚洲va香蕉在线| 久久99久国产精品黄毛片色诱| 日韩视频中午一区| 九九热在线视频观看这里只有精品| 6080日韩午夜伦伦午夜伦| 日韩高清电影一区| 欧美日韩亚洲综合一区| 香港成人在线视频| 欧美一级久久久| 狠狠色狠狠色综合系列| 精品国内二区三区| 国产精品一区二区你懂的| 日本一区二区在线不卡| 粉嫩av一区二区三区粉嫩| 欧美国产一区视频在线观看| 成人午夜大片免费观看| 国产精品久久久久久久久久免费看| 国产一区二区三区黄视频| 国产日韩欧美高清在线| 成人美女在线视频| 亚洲欧美另类图片小说| 欧美日韩中文另类| 日本中文在线一区| 精品久久久久香蕉网| 国产麻豆一精品一av一免费| 欧美极品美女视频| 色婷婷av一区二区| 视频一区视频二区中文| 精品久久久久久综合日本欧美| 国产69精品一区二区亚洲孕妇| 中文字幕一区三区| 欧美日韩中文另类| 国内久久精品视频| ...xxx性欧美| 欧美日韩亚洲综合在线| 精品一区免费av| 亚洲欧洲精品一区二区三区| 欧美日韩精品一区视频| 国产伦精品一区二区三区免费 |