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

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

?? npwnd.c

?? Windows CE 下的計(jì)算器源代碼。
?? C
字號(hào):
//======================================================================
// NPWnd - An IM window
//
// Written for the book Programming Windows CE
// Copyright (C) 1998 Douglas Boling
//======================================================================
#include <windows.h>
#define COBJMACROS
#include <aygshell.h>                // Palm-size PC shell includes
#include <sip.h>                     // SIP includes
#include <keybd.h>                   // Keyboard flag includes

#include "NPWnd.h"                  // Includes for this window

INT DrawButton (HDC hdc, RECT *prect, LPTSTR pChar, BOOL fPressed);

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,
};
//======================================================================
// 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 = LocalAlloc (LPTR, sizeof (SIPWNDSTRUCT));
    if (!pWndData) {
        DestroyWindow (hWnd);
        return 0;
    }
    memset (pWndData, 0, sizeof (SIPWNDSTRUCT));
    GetWindowRect (GetParent (hWnd), &pWndData->rectDocked);
    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 0:
        pWndData->pIMCallback = (IIMCallback *)lParam;
        break;
    // Called when GetInfo method called
    case 1:
        pWndData->imi = *(IMINFO *)lParam;
        break;
    // Called when ReceiveSipInfo method called
    case 2:
        GetClientRect (GetParent(hWnd), &rect);
        MoveWindow (hWnd, 0, 0, rect.right - rect.left,
                    rect.bottom - rect.top, TRUE);
        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 = 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;
}
//----------------------------------------------------------------------
// HandleGripper - Handles mouse messages over gripper bar
//
LRESULT HandleGripper (HWND hWnd, LPSIPWNDSTRUCT pWndData, UINT wMsg, 
                       LPARAM lParam) {
    POINT pt;

    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;
        break;

    case WM_MOUSEMOVE:
        if (!pWndData->fMoving)
            return 0;
        break;
    case WM_LBUTTONUP:
        if (!pWndData->fMoving)
            return 0;
        ReleaseCapture();
        pWndData->fMoving = FALSE;
        ClientToScreen (hWnd, &pt);
        if ((abs (pWndData->ptMovStart.x - pt.x) < 3) &&
            (abs (pWndData->ptMovStart.y - pt.y) < 3))
            break;
        pt.x -= pWndData->ptMovBasis.x;
        pt.y -= pWndData->ptMovBasis.y;

        pWndData->imi.rcSipRect.right = FLOATWIDTH;
        pWndData->imi.rcSipRect.bottom = FLOATHEIGHT;
        pWndData->imi.rcSipRect.left = pt.x;
        pWndData->imi.rcSipRect.top = pt.y;
        pWndData->imi.rcSipRect.right += pt.x;
        pWndData->imi.rcSipRect.bottom += pt.y;

        pWndData->imi.fdwFlags &= ~SIPF_DOCKED;
        pWndData->imi.fdwFlags |= SIPF_ON;

        IIMCallback_SetImInfo(pWndData->pIMCallback, &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);
        break;
    }
    pWndData->dwBtnDnFlags = 0;   // If we moved, no buttons down.
    return 1;
}
//----------------------------------------------------------------------
// DoMouseSip - Process mouse button messages for window. 
//
LRESULT CALLBACK DoMouseSip (HWND hWnd, UINT wMsg, WPARAM wParam, 
                             LPARAM lParam) {
    RECT rect;
    INT i, x, y, cx, cy, nChar;
    DWORD BtnDnFlags, dwShiftFlags = 0;
    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];
        IIMCallback_SendCharEvents(pWndData->pIMCallback, 
                                   g_BtnVChars[i], KeyStateDownFlag,
                                   1, &dwShiftFlags, &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一区二区三区免费野_久草精品视频
日韩三区在线观看| 亚洲丰满少妇videoshd| 欧美一级在线观看| 欧美日韩国产区一| 欧美在线你懂的| 91丝袜国产在线播放| 成人高清视频在线| 色综合久久99| 91在线porny国产在线看| 日韩激情在线观看| 亚洲一区二区三区精品在线| 亚洲人成影院在线观看| 欧美精彩视频一区二区三区| 欧美r级在线观看| 久久久www成人免费无遮挡大片| 日韩精品中文字幕一区| 欧美男人的天堂一二区| 日韩精品专区在线| 久久蜜桃av一区精品变态类天堂 | 国产精品人妖ts系列视频| 久久中文字幕电影| 久久综合九色综合欧美亚洲| 国产日产欧美一区二区视频| 中文字幕一区日韩精品欧美| 亚洲欧美日韩小说| 日韩激情中文字幕| 国产成人av一区二区| 91理论电影在线观看| 欧美日韩国产成人在线91| 久久综合久久综合久久| 综合色中文字幕| 午夜精品视频一区| 国产乱理伦片在线观看夜一区 | 国产日韩精品一区二区三区| 中文字幕中文字幕中文字幕亚洲无线| 亚洲免费在线观看视频| 日韩av电影免费观看高清完整版在线观看| 免费人成网站在线观看欧美高清| 国产专区综合网| 在线观看三级视频欧美| 日韩欧美电影一区| 一区二区三区在线观看动漫| 久色婷婷小香蕉久久| jlzzjlzz亚洲日本少妇| 91精品国产综合久久蜜臀| 欧美激情一二三区| 欧美色区777第一页| 久久午夜色播影院免费高清| 一区二区三区在线免费| 国产成人精品亚洲777人妖 | 午夜精品福利一区二区蜜股av | 欧美一二三区在线| 中文字幕一区二区视频| 免费一级片91| 欧美写真视频网站| 国产精品理伦片| 激情久久五月天| 欧美男女性生活在线直播观看 | 在线欧美小视频| 久久久国产午夜精品| 日韩国产欧美在线视频| 91浏览器在线视频| 中文字幕亚洲区| 国产高清在线精品| 精品欧美一区二区三区精品久久| 一区二区三区欧美久久| 成人性生交大片免费看视频在线| 日韩欧美久久一区| 天天操天天综合网| 欧美人伦禁忌dvd放荡欲情| 亚洲乱码国产乱码精品精的特点 | 亚洲超丰满肉感bbw| 91在线视频18| 亚洲男同性视频| 成人av网在线| 国产精品美女久久久久aⅴ| 国产乱码精品一区二区三区忘忧草 | 一区二区三区在线免费观看| 99在线热播精品免费| 国产女人18毛片水真多成人如厕| 日本成人在线电影网| 欧美日韩一区二区三区免费看| 欧美国产日韩亚洲一区| 国产一二三精品| 欧美不卡123| 国产精品综合久久| 精品奇米国产一区二区三区| 国产麻豆日韩欧美久久| 久久久99精品免费观看| 国产成人精品综合在线观看| 国产日韩av一区| av电影天堂一区二区在线| 国产午夜亚洲精品不卡| 成人免费va视频| 亚洲欧美一区二区视频| 欧美中文字幕一区| 天天色综合天天| 久久久久一区二区三区四区| 国产成人免费视频网站高清观看视频| 久久久亚洲午夜电影| 粉嫩av一区二区三区在线播放| 亚洲欧洲99久久| 欧美写真视频网站| 精品制服美女丁香| 欧美国产日产图区| 欧美日韩在线免费视频| 老司机免费视频一区二区三区| 东方欧美亚洲色图在线| 国产女人aaa级久久久级| 一本到一区二区三区| 日韩av在线发布| 国产亚洲精品aa| 欧美中文字幕一二三区视频| 久久99国产精品久久99| 亚洲欧洲韩国日本视频| 欧美精品 日韩| 成+人+亚洲+综合天堂| 一区二区免费在线| 精品久久久久av影院| 91丨porny丨中文| 狠狠色丁香久久婷婷综合_中| 中文字幕中文乱码欧美一区二区| 欧美熟乱第一页| 国产白丝网站精品污在线入口| 一二三四区精品视频| 精品久久久久久久一区二区蜜臀| 色网站国产精品| 国产精品一区二区免费不卡| 亚洲精品亚洲人成人网在线播放| 日韩一区二区三区高清免费看看 | 久久久www成人免费毛片麻豆| 欧美亚洲国产一区二区三区| 国产乱码一区二区三区| 免费成人av在线播放| 亚洲美女淫视频| 国产精品色一区二区三区| 欧美一区二区精品| 在线观看亚洲精品| 高清免费成人av| 激情文学综合插| 天天综合天天综合色| 亚洲色图.com| 国产精品亲子伦对白| 精品少妇一区二区三区日产乱码 | eeuss鲁一区二区三区| 国产在线精品一区二区夜色| 亚洲国产日韩av| 亚洲欧美国产77777| 国产亲近乱来精品视频 | 中文字幕第一区| 欧美精品一区二区三区在线播放 | 国产精品888| 久久精品国产成人一区二区三区 | 亚洲欧洲av在线| 中文字幕一区二区在线播放| 国产精品成人一区二区艾草| 亚洲欧美影音先锋| 玉米视频成人免费看| 一区二区三区日韩精品视频| 亚洲一区二区三区三| 午夜日韩在线电影| 毛片基地黄久久久久久天堂| 精品一区二区三区久久久| 国产一区视频导航| 国产精品一区二区久激情瑜伽 | 91精品国产乱| 精品久久国产老人久久综合| 久久久蜜桃精品| 精品少妇一区二区| 日韩三级在线免费观看| 这里只有精品电影| 色呦呦一区二区三区| 亚洲免费毛片网站| 久久久精品影视| 精品久久久久香蕉网| 555夜色666亚洲国产免| 亚洲精品在线观| 日韩一区二区免费在线观看| 亚洲综合久久av| 久久久99精品久久| 精品三级在线看| 2020国产精品久久精品美国| 中文字幕久久午夜不卡| 91麻豆精品国产91久久久久久| 91豆麻精品91久久久久久| www.视频一区| 国产一区 二区| 韩国欧美一区二区| 国产精品影音先锋| 久久99国产精品成人| 国产大陆亚洲精品国产| 国产成人丝袜美腿| 粉嫩av一区二区三区粉嫩| 成人高清视频在线观看| 久久精工是国产品牌吗| 色天天综合色天天久久| 欧美色国产精品| 91精品视频网| 91精品一区二区三区久久久久久 | 亚洲猫色日本管|