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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? numpanel.c

?? 針對(duì)Pocket PC示範(fàn)一個(gè)計(jì)算機(jī)視窗
?? C
字號(hào):
//======================================================================
// NumPanel - An IM window
//
// Written for the book Programming Windows CE
// Copyright (C) 2003 Douglas Boling
//======================================================================
#include <windows.h>                 // For all that Windows stuff
#define COBJMACROS
//#include <aygshell.h>                // Pocket PC shell includes
#include <sip.h>                     // SIP includes
#include <keybd.h>                   // Keyboard flag includes

#include "NumPanel.h"                // Includes for this window
extern "C" HINSTANCE hInst;
//
// Local variables for number panel 
//
TCHAR g_tcBtnChar[] = {
        TEXT('1'), TEXT('2'), TEXT('3'), TEXT('-'), TEXT('*'),
        TEXT('4'), TEXT('5'), TEXT('6'), TEXT('+'), TEXT('/'),
        TEXT('7'), TEXT('8'), TEXT('9'), TEXT('0'), TEXT('='),
};
UINT g_BtnVChars[] = {
        '1', '2', '3', VK_HYPHEN, VK_MULTIPLY, 
        '4', '5', '6', VK_ADD, VK_SLASH,
        '7', '8', '9', '0', VK_EQUAL,
};

// Message dispatch table for SipWindowProc
const struct decodeUINT SipMessages[] = {
    WM_CREATE, DoCreateSip,
    WM_PAINT, DoPaintSip,
    MYMSG_METHCALL, DoSetSipInfo,
    WM_LBUTTONDOWN, DoMouseSip,
    WM_MOUSEMOVE, DoMouseSip,
    WM_LBUTTONUP, DoMouseSip,
    WM_LBUTTONDBLCLK, DoMouseSip,
    WM_DESTROY, DoDestroySip,
};
//----------------------------------------------------------------------
// CreateIMWindow - Create the input method window.
//
HWND CreateIMWindow (HWND hwndParent) {
    WNDCLASS wc;
    RECT rect;
    HWND hwnd;
    // Register sip window class.
    memset (&wc, 0, sizeof (wc));
    wc.style = CS_DBLCLKS;
    wc.lpfnWndProc = NPWndProc;               // Callback function
    wc.hInstance = hInst;                     // Owner handle
    wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
    wc.lpszClassName = MYSIPCLS;              // Window class name
    if (RegisterClass (&wc) == 0) return 0;

    // Create SIP window.  
    GetClientRect (hwndParent, &rect);
    hwnd = CreateWindowEx (0, MYSIPCLS, TEXT(""), 
                  WS_VISIBLE | WS_CHILD | WS_BORDER, rect.left, 
                  rect.top, rect.right - rect.left, 
                  rect.bottom - rect.top, hwndParent, (HMENU)100, 
                  hInst, 0);
    if (!IsWindow (hwnd))
        return 0;
    return hwnd;
}
//----------------------------------------------------------------------
// DestroyIMWindow - Destroy the input method window.
//
int DestroyIMWindow (HWND hwnd) {
    // Clean up since we're about to be unloaded.
    DestroyWindow (hwnd);
    UnregisterClass (MYSIPCLS, hInst);
    return 0;
}

//======================================================================
// NPWndProc - Window procedure for SIP 
//
LRESULT CALLBACK NPWndProc (HWND hWnd, UINT wMsg, WPARAM wParam, 
                            LPARAM lParam) {
    INT  i;
    // Call routine to handle control message.
    for (i = 0; i < dim(SipMessages); i++) {
        if (wMsg == SipMessages[i].Code)
            return (*SipMessages[i].Fxn)(hWnd, wMsg, wParam, lParam);
    }
    return DefWindowProc (hWnd, wMsg, wParam, lParam);
}
//----------------------------------------------------------------------
// DoCreateSip - Process WM_CREATE message for window.
//
LRESULT CALLBACK DoCreateSip (HWND hWnd, UINT wMsg, WPARAM wParam, 
                              LPARAM lParam) {
    LPSIPWNDSTRUCT pWndData;
    // Allocate a data structure for the sip keyboard window.    
    pWndData = (LPSIPWNDSTRUCT)LocalAlloc (LPTR, sizeof (SIPWNDSTRUCT));
    if (!pWndData) {
        DestroyWindow (hWnd);
        return 0;
    }
    memset (pWndData, 0, sizeof (SIPWNDSTRUCT));
    GetWindowRect (GetParent (hWnd), &pWndData->rectDocked);
    pWndData->rectLast.left = -1;
    SetWindowLong (hWnd, GWL_USERDATA, (INT)pWndData);
    return 0;
}
//----------------------------------------------------------------------
// DoSetSipInfo - Process set information user message for window.
//
LRESULT CALLBACK DoSetSipInfo (HWND hWnd, UINT wMsg, WPARAM wParam, 
                               LPARAM lParam) {
    LPSIPWNDSTRUCT pWndData;
    RECT rect;
    
    pWndData = (LPSIPWNDSTRUCT)GetWindowLong (hWnd, GWL_USERDATA);
    switch (wParam) {
    // Called when RegisterCallback method called
    case MSGCODE_REGCALLBACK:
        pWndData->pIMCallback = (IIMCallback *)lParam;
        break;
    // Called when GetInfo method called
    case MSGCODE_GETINFO:
        pWndData->imi = *(IMINFO *)lParam;
        break;
    // Called when ReceiveSipInfo method called
    case MSGCODE_SETINFO:
        GetClientRect (GetParent(hWnd), &rect);
        MoveWindow (hWnd, 0, 0, rect.right - rect.left,
                    rect.bottom - rect.top, TRUE);
        break;
    // Called when RegisterCallback2 method called
    case MSGCODE_REGCALLBACK2:
        pWndData->pIMCallback2 = (IIMCallback2 *)lParam;
        break;
    }
    return 0;
}
//----------------------------------------------------------------------
// DoPaintSip - Process WM_PAINT message for window.
//
LRESULT CALLBACK DoPaintSip (HWND hWnd, UINT wMsg, WPARAM wParam, 
                             LPARAM lParam) {
    HDC hdc;
    HBRUSH hOld;
    PAINTSTRUCT ps;
    RECT rect, rectBtn;
    INT i, j, k, x, y, cx, cy, cxBtn, cyBtn;
    LPSIPWNDSTRUCT pWndData;

    pWndData = (LPSIPWNDSTRUCT)GetWindowLong (hWnd, GWL_USERDATA);

    hdc = BeginPaint (hWnd, &ps);
    GetClientRect (hWnd, &rect);

    cx = (rect.right - rect.left - 3 - GRIPWIDTH) / CXBTNS;
    cy = (rect.bottom - rect.top - 3) / CYBTNS;
    cxBtn = cx - 3;
    cyBtn = cy - 3;

    // Select a brush for the gripper.
    hOld = (HBRUSH)SelectObject (hdc, GetStockObject (GRAY_BRUSH));
    Rectangle (hdc, rect.left, rect.top, rect.left + GRIPWIDTH, 
               rect.bottom);
    SelectObject (hdc, hOld);

    k = 0;
    y = 3;
    for (i = 0; i < CYBTNS; i++) {
        x = 3 + GRIPWIDTH;
        for (j = 0; j < CXBTNS; j++) {
            SetRect (&rectBtn, x, y, x + cxBtn, y + cyBtn);
            DrawButton (hdc, &rectBtn, &g_tcBtnChar[k++], 
                        pWndData->dwBtnDnFlags & (1 << k));
            x += cx;
        }
        y += cy;
    }
    EndPaint (hWnd, &ps);
    return 0;
}
//----------------------------------------------------------------------
// ComputeFloatRect - Compute the location and size of the drag rect.
//
int ComputeFloatRect (HWND hwnd, LPSIPWNDSTRUCT pWndData, POINT pt,
                      RECT *prectOut) {

    pt.x -= pWndData->ptMovBasis.x;
    pt.y -= pWndData->ptMovBasis.y;
    prectOut->right = FLOATWIDTH;
    prectOut->bottom = FLOATHEIGHT;
    prectOut->left = pt.x;
    prectOut->top = pt.y;
    prectOut->right += pt.x;
    prectOut->bottom += pt.y;
    return 0;
}
//----------------------------------------------------------------------
// DrawFloatRect - Draw a drag rectangle by XORing the desktop.
//
int DrawFloatRect (HWND hWnd, RECT rect) {
    HDC hdc;
    HBRUSH hbrOld;
    HPEN hpenOld;
    int nOldMode;
    // Get the DC. Set ROP, brush, and pen.
    hdc = GetDC (NULL);
    nOldMode = SetROP2 (hdc, R2_NOT);
    hbrOld = (HBRUSH)SelectObject (hdc, GetStockObject (NULL_BRUSH));
    hpenOld = (HPEN)SelectObject (hdc, GetStockObject (BLACK_PEN));

    Rectangle (hdc, rect.left, rect.top, rect.right, rect.bottom);
    SelectObject (hdc, hbrOld);
    SelectObject (hdc, hpenOld);
    SetROP2 (hdc, nOldMode);
    ReleaseDC (NULL, hdc);
    return 0;
}
//----------------------------------------------------------------------
// HandleGripper - Handles mouse messages over gripper bar
//
LRESULT HandleGripper (HWND hWnd, LPSIPWNDSTRUCT pWndData, UINT wMsg, 
                       LPARAM lParam) {
    POINT pt;
    RECT rectFloat;

    pt.x = (short)LOWORD(lParam);
    pt.y = (short)HIWORD(lParam);

    switch (wMsg) {
    case WM_LBUTTONDOWN:
        if (pt.x > GRIPWIDTH+3)
            return 0;
        SetCapture (hWnd);
        pWndData->fMoving = TRUE;
        pWndData->ptMovBasis = pt;
        ClientToScreen (hWnd, &pt);
        pWndData->ptMovStart = pt;
        ShowWindow (GetParent(hWnd), SW_HIDE);
        break;

    case WM_MOUSEMOVE:
        if (!pWndData->fMoving)
            return 0;
        ClientToScreen (hWnd, &pt);
        ComputeFloatRect (hWnd, pWndData, pt, &rectFloat);
        // Erase old drag rectangle.
        if (pWndData->rectLast.left != -1)
            DrawFloatRect (hWnd, pWndData->rectLast);
        // Draw new drag rectangle.
        DrawFloatRect (hWnd, rectFloat);
        pWndData->rectLast = rectFloat;
        break;
    case WM_LBUTTONUP:
        if (!pWndData->fMoving)
            return 0;
        // Free up dragging stuff.
        ReleaseCapture();
        pWndData->fMoving = FALSE;
        ClientToScreen (hWnd, &pt);
        // Erase last drag rectangle.
        ComputeFloatRect (hWnd, pWndData, pt, &rectFloat);
        if (pWndData->rectLast.left != -1)
            DrawFloatRect (hWnd, pWndData->rectLast);
        pWndData->rectLast.left = -1;
        ShowWindow (GetParent(hWnd), SW_SHOW);
        // Don't move SIP if really small move.
        if ((abs (pWndData->ptMovStart.x - pt.x) < 3) &&
            (abs (pWndData->ptMovStart.y - pt.y) < 3))
            break;
        // Tell the Input Manager about the move.
        pWndData->imi.rcSipRect = rectFloat;
        pWndData->imi.fdwFlags &= ~SIPF_DOCKED;
        pWndData->imi.fdwFlags |= SIPF_ON;
//        IIMCallback_SetImInfo(pWndData->pIMCallback, &pWndData->imi);
        pWndData->pIMCallback->SetImInfo(&pWndData->imi);
        break;

    case WM_LBUTTONDBLCLK:
        if (pt.x > GRIPWIDTH+3)
            return 0;
        ReleaseCapture();
        pWndData->fMoving = FALSE;
        pWndData->imi.fdwFlags |= (SIPF_DOCKED | SIPF_ON);
        pWndData->imi.rcSipRect = pWndData->rectDocked;
//        IIMCallback_SetImInfo(pWndData->pIMCallback, &pWndData->imi);
        pWndData->pIMCallback->SetImInfo(&pWndData->imi);
        break;
    }
    pWndData->dwBtnDnFlags = 0;   // If we moved, no buttons down.
    return 1;
}
//----------------------------------------------------------------------
// DoMouseSip - Process mouse button messages for window. WM_LBUTTONDOWN
//
LRESULT CALLBACK DoMouseSip (HWND hWnd, UINT wMsg, WPARAM wParam, 
                             LPARAM lParam) {
    RECT rect;
    INT i, x, y, cx, cy;
	UINT nShiftFlags = 0, nChar;
    DWORD BtnDnFlags;
    LPSIPWNDSTRUCT pWndData;
    pWndData = (LPSIPWNDSTRUCT)GetWindowLong (hWnd, GWL_USERDATA);

    // See if moving gripper or gripper tap.
    if (HandleGripper (hWnd, pWndData, wMsg, lParam)) 
        return 0;

    // Compute the button grid.
    GetClientRect (hWnd, &rect);
    cx = (rect.right - rect.left - 3 - GRIPWIDTH) / CXBTNS;
    cy = (rect.bottom - rect.top - 3) / CYBTNS;
    x = ((LOWORD (lParam)-3-GRIPWIDTH) / cx);
    y = ((HIWORD (lParam)-3) / cy);
    i = (y * CXBTNS) + x;    // i now contains btn index.

    // Do small amount of message-specific processing.
    switch (wMsg) {
    case WM_LBUTTONDOWN:
        SetCapture (hWnd);
        // Fall through to WM_MOUSEMOVE case.
    case WM_MOUSEMOVE:
        BtnDnFlags = 1 << i;
        break;
    case WM_LBUTTONDBLCLK:
    case WM_LBUTTONUP:
        if (pWndData->dwBtnDnFlags)
            ReleaseCapture();
        BtnDnFlags = 0;
        nChar = g_tcBtnChar[i];
        pWndData->pIMCallback->SendCharEvents(g_BtnVChars[i], KeyStateDownFlag,
                                   1, &nShiftFlags, &nChar);
        break;
    } 
    // Decide how to repaint wnd. If only 1 btn changed, just 
    // invalidate that rect. Otherwise, invalidate entire wnd.
    if ((wMsg == WM_MOUSEMOVE) && (BtnDnFlags !=pWndData->dwBtnDnFlags))
        InvalidateRect (hWnd, NULL, FALSE);
    else {
        i = 3+GRIPWIDTH;   // Compensate for the gripper on left side.
        SetRect (&rect, x*cx+i, y*cy, (x+1)*cx+i, (y+1)*cy);
        InvalidateRect (hWnd, &rect, FALSE);
    }
    pWndData->dwBtnDnFlags = BtnDnFlags;
    return 0;
}
//----------------------------------------------------------------------
// DoDestroySip - Process WM_DESTROY message for window.
//
LRESULT CALLBACK DoDestroySip (HWND hWnd, UINT wMsg, WPARAM wParam, 
                               LPARAM lParam) {
    LPSIPWNDSTRUCT pWndData;
    
    pWndData = (LPSIPWNDSTRUCT)GetWindowLong (hWnd, GWL_USERDATA);
    LocalFree (pWndData);
    return 0;
}
//---------------------------------------------------------------------
// DrawButton - Draws a button
//
INT DrawButton (HDC hdc, RECT *prect, LPTSTR pChar, BOOL fPressed) {

    if (!fPressed) {
        SelectObject (hdc, GetStockObject (BLACK_PEN));
        SelectObject (hdc, GetStockObject (WHITE_BRUSH));
        SetBkColor (hdc, RGB (255, 255, 255));
        SetTextColor (hdc, RGB (0, 0, 0));
    } else {
        SelectObject (hdc, GetStockObject (BLACK_BRUSH));
        SelectObject (hdc, GetStockObject (WHITE_PEN));
        SetTextColor (hdc, RGB (255, 255, 255));
        SetBkColor (hdc, RGB (0, 0, 0));
    }
    Rectangle (hdc, prect->left, prect->top, prect->right, 
               prect->bottom);
    Rectangle (hdc, prect->left+1, prect->top+1, prect->right+1, 
               prect->bottom+1);
    DrawText (hdc, pChar, 1, prect, DT_CENTER|DT_VCENTER|DT_SINGLELINE);
    return 0;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线观看一区| 精品无人区卡一卡二卡三乱码免费卡 | 久久久久久日产精品| 国产精品麻豆一区二区| 一区二区三区高清不卡| 蜜桃传媒麻豆第一区在线观看| 国产精品一二三区| 91免费视频网址| 日韩欧美在线观看一区二区三区| 国产喂奶挤奶一区二区三区| 一区二区在线免费观看| 久久激情五月婷婷| av日韩在线网站| 日韩亚洲欧美综合| 国产精品成人免费精品自在线观看 | 国内外精品视频| 色先锋久久av资源部| 日韩精品最新网址| 亚洲人成精品久久久久久 | 精品国偷自产国产一区| 亚洲视频一区二区在线观看| 男人操女人的视频在线观看欧美| aaa国产一区| 欧美一卡二卡三卡| 亚洲精品videosex极品| 国产一区二区女| 欧美日韩精品一区二区三区| 国产欧美精品一区二区色综合| 亚洲成va人在线观看| 成人一区二区在线观看| 7777精品伊人久久久大香线蕉| 国产精品不卡在线| 国内精品免费在线观看| 欧美日韩一区精品| **性色生活片久久毛片| 韩国女主播一区| 亚洲线精品一区二区三区| 国产一区二区三区综合| 欧美理论在线播放| 亚洲蜜臀av乱码久久精品 | 国产精品日产欧美久久久久| 蜜桃视频在线观看一区| 欧美中文字幕亚洲一区二区va在线 | 亚洲欧美日韩国产综合在线| 国产伦精品一区二区三区免费迷| 欧美精选在线播放| 伊人一区二区三区| 91在线视频官网| 国产日韩三级在线| 极品瑜伽女神91| 91精品欧美久久久久久动漫| 亚洲综合免费观看高清在线观看| 成人天堂资源www在线| 26uuuu精品一区二区| 秋霞影院一区二区| 欧美精品成人一区二区三区四区| 一区二区三区四区五区视频在线观看| 成人丝袜视频网| 久久丝袜美腿综合| 国产资源精品在线观看| 欧美大度的电影原声| 免费欧美在线视频| 欧美一区二区视频观看视频| 午夜精品一区二区三区免费视频| 91官网在线观看| 亚洲在线成人精品| 91久久国产最好的精华液| 亚洲乱码国产乱码精品精可以看| 99精品欧美一区二区蜜桃免费| 国产精品国产三级国产aⅴ入口| 国产成人午夜片在线观看高清观看| 欧美成人福利视频| 国产一本一道久久香蕉| 久久久久久综合| 国产成人综合在线| 国产精品理论在线观看| 成人av在线一区二区三区| 国产精品国模大尺度视频| 99久久久精品免费观看国产蜜| 中文字幕制服丝袜一区二区三区| 久久精品视频一区| 国产一区二区三区四区五区美女| 26uuu亚洲婷婷狠狠天堂| 国产精一区二区三区| 日本一区二区免费在线| 成人高清视频在线| 亚洲视频香蕉人妖| 色哟哟一区二区三区| 依依成人精品视频| 欧美精品99久久久**| 捆绑调教一区二区三区| 久久久国产一区二区三区四区小说 | 色偷偷久久人人79超碰人人澡| 一区二区三区四区在线| 欧美肥妇bbw| 国产乱码精品一区二区三区五月婷 | 亚洲精品成人精品456| 欧美色大人视频| 麻豆成人在线观看| 国产日韩影视精品| 99国产精品久久久久久久久久久| 一区二区三区免费在线观看| 欧美猛男gaygay网站| 久久精品国产99| 国产精品久久久久aaaa| 欧美日韩一卡二卡三卡| 久久成人精品无人区| 国产精品天天看| 欧美日韩一级片网站| 久久99国产精品麻豆| 国产成人精品免费看| 一区二区三区国产豹纹内裤在线| 欧美一区二区三区公司| 国产91丝袜在线观看| 亚洲综合网站在线观看| 欧美xxxxx牲另类人与| av色综合久久天堂av综合| 日韩精品一区第一页| 国产欧美日韩麻豆91| 欧美日韩美女一区二区| 国产精品一区二区三区99| 夜夜嗨av一区二区三区四季av| 日韩精品中文字幕一区 | 亚洲日本免费电影| 日韩一区二区三区免费观看| 成人免费va视频| 日韩精品欧美精品| 中文字幕一区二区在线观看| 在线不卡中文字幕| av欧美精品.com| 精品夜夜嗨av一区二区三区| 亚洲蜜臀av乱码久久精品| 26uuu久久综合| 欧美视频一区二区三区四区| 国产精品18久久久久| 午夜天堂影视香蕉久久| 中文一区一区三区高中清不卡| 欧美日本视频在线| av日韩在线网站| 国产一区二区三区综合| 视频一区二区欧美| 亚洲男人天堂一区| 久久久99精品免费观看| 制服丝袜一区二区三区| 色综合天天综合狠狠| 日韩视频免费观看高清完整版 | 精品福利视频一区二区三区| 在线观看日韩电影| 成人免费观看视频| 韩国理伦片一区二区三区在线播放| 亚洲综合成人在线| 亚洲欧美在线另类| 久久久久久麻豆| 日韩欧美一区在线| 欧美乱熟臀69xxxxxx| 色婷婷精品大在线视频| 高清不卡一二三区| 韩国欧美国产1区| 免费人成精品欧美精品| 亚洲成a人片综合在线| 一片黄亚洲嫩模| 亚洲欧洲在线观看av| 日本一区二区三区dvd视频在线| 日韩欧美亚洲国产另类| 欧美久久婷婷综合色| 欧美性猛片aaaaaaa做受| 色综合天天视频在线观看| 国产成人精品免费视频网站| 国产在线视视频有精品| 久久精品国产精品青草| 乱中年女人伦av一区二区| 爽好多水快深点欧美视频| 亚洲在线观看免费| 亚洲一区二区三区精品在线| 亚洲精品精品亚洲| 亚洲日本电影在线| 亚洲欧美经典视频| 一区二区在线看| 一区二区成人在线观看| 一个色在线综合| 亚洲制服丝袜av| 亚洲最大的成人av| 亚洲综合网站在线观看| 亚洲国产一区在线观看| 亚洲福利电影网| 日本不卡在线视频| 男人的天堂久久精品| 精品一区二区国语对白| 国产一区二区精品久久99| 国产精品一二三在| a级高清视频欧美日韩| 成人app在线观看| 色呦呦一区二区三区| 精品污污网站免费看| 欧美一区二区三区在| 久久午夜电影网| 中文字幕一区二区三区在线不卡 | av电影一区二区| 色综合久久久久综合99| 欧美丝袜丝交足nylons|