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

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

?? menubutton.cpp

?? 一個WinCE6。0下的IP phone的源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this sample source code is subject to the terms of the Microsoft
// license agreement under which you licensed this sample source code. If
// you did not accept the terms of the license agreement, you are not
// authorized to use this sample source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the LICENSE.RTF on your install media or the root of your tools installation.
// THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES.
//
#include "MenuButton.hpp"
#include "Common.hpp"
#include <windowsx.h>
#include "PaintHelper.hpp"
#include "Debug.hpp"
#include "resource.h"
#include "Layout.hpp"
#include "Input.hpp"


//constants
const WCHAR MenuButtonImpl_t::INPUT_BUTTON[] = L"INPUT";

/*------------------------------------------------------------------------------
    MenuButtonImpl_t::MenuButtonImpl_t

    Ctor
------------------------------------------------------------------------------*/
MenuButtonImpl_t::MenuButtonImpl_t(
    )
{
    TRACE(ZONE_COMMON_CTOR);

    m_IsPressedDown = false;
    m_PopupIsVisible = false;
    
    ZeroMemory(&m_Data, sizeof(m_Data));
}

/*------------------------------------------------------------------------------
    MenuButtonImpl_t::~MenuButtonImpl_t

    Dtor
------------------------------------------------------------------------------*/
MenuButtonImpl_t::~MenuButtonImpl_t(
    )
{
    TRACE(ZONE_COMMON_CTOR);

    PopupMenu_t menu;

    if (m_Data.IsMenu && m_Data.Value.PopupMenu)
    {
        menu = m_Data.Value.PopupMenu;
        menu.Destroy();
    }
}

/*------------------------------------------------------------------------------
    MenuButtonImpl_t::GetWindowClassStyle

    Specifies the windows class style to be registered
------------------------------------------------------------------------------*/
const UINT
MenuButtonImpl_t::GetWindowClassStyle(
    void
    )
{
    // Menu button should redraw the entire window if a movement
    // or size adjustment changes the width of the client area
    return CS_HREDRAW;
}

/*------------------------------------------------------------------------------
    MenuButtonImpl_t::ControlWindowProc

    Handle messages
------------------------------------------------------------------------------*/
LRESULT
MenuButtonImpl_t::ControlWindowProc(
    UINT Message,
    WPARAM wParam,
    LPARAM lParam,
    bool& Handled
    )
{
    //assume we handle the message
    Handled = true;

    switch (Message)
    {
    case WM_ERASEBKGND:
        //do nothing with erase background
        return 1;

    case WM_PAINT:
        return OnPaint(reinterpret_cast<HDC>(wParam));

    case WM_LBUTTONDOWN:
        return OnLButtonDown(wParam, lParam);

    case WM_LBUTTONUP:
        return OnLButtonUp(wParam, lParam);

    case WM_CAPTURECHANGED:
        return OnLostCapture();

    case WM_MOUSEMOVE:
        return OnMouseMove(wParam, lParam);

    case WM_COMMON_CALCULATE_DIMENSIONS:
        return OnCalculateDimensions(reinterpret_cast<SIZE*>(lParam));

    case WM_MENUBUTTON_GETDATA:
        return OnGetData(reinterpret_cast<MenuButton_t::ButtonData_t*>(lParam), wParam);

    case WM_MENUBUTTON_SETDATA:
        return OnSetData(reinterpret_cast<const MenuButton_t::ButtonData_t*>(lParam), wParam);

    case WM_MENUBUTTON_SHOW:
        return OnShow(wParam);

    case WM_SETTEXT:
        return OnSetText(reinterpret_cast<const WCHAR*>(lParam));

    default:
        //we didn't handle the message
        Handled = false;
        return 0;
    }
}

/*------------------------------------------------------------------------------
    MenuButtonImpl_t::GetInputButtonText

    Gets the text for the input button
------------------------------------------------------------------------------*/
int
MenuButtonImpl_t::GetInputButtonText(
    __out_ecount(cchBuffer) WCHAR* pBuffer,
    int cchBuffer
    )
{
    if (!pBuffer || (cchBuffer < 0))
    {
        return 0;
    }
    
    if (!m_Data.IsInputButton || !Input_IsIMEEnabled())
    {
        *pBuffer = 0;
        return 0;
    }

    UINT StringId;
    Input_t::IMEType_e Type = Input_GetIMEType(); 

    switch (Type)
    {
        case Input_t::itMultitap:
            StringId = IDS_IMEMENU_MULTITAP; 
            break; 

        case Input_t::itMultitapUppercase:
            StringId = IDS_IMEMENU_MULTITAPUPPERCASE; 
            break; 

        case Input_t::itNum:
        default:
            StringId = IDS_IMEMENU_NUM; 
            break; 
    }

    size_t cchCopied = 0;
    StringCchCopyExW(
        pBuffer,
        cchBuffer,
        CommonUtilities_t::LoadString(
            GlobalData_t::s_ModuleInstance,
            StringId
            ),
        NULL,
        &cchCopied,
        STRSAFE_IGNORE_NULLS
        );
    cchCopied = cchBuffer - cchCopied;

    return cchCopied;
}

/*------------------------------------------------------------------------------
    MenuButtonImpl_t::OnCalculateDimensions

    Calculate the size for this button
------------------------------------------------------------------------------*/
LRESULT
MenuButtonImpl_t::OnCalculateDimensions(
    SIZE* pDimensions
    )
{
    HRESULT hr;
    WCHAR TextBuffer[100] = TEXT("");

    if (!pDimensions)
    {
        ASSERT(0);
        return 0;
    }

    pDimensions->cy = Layout_t::ButtonHeight();

    if (!(GetWindowLong(m_hwnd, GWL_STYLE) & WS_VISIBLE))
    {
        pDimensions->cx = 0;
        return 1;
    }

    if (m_Data.IsInputButton)
    {
        UINT BitmapID = Input_IsIMEEnabled() ?
            IDB_IME_BACKGROUND :
            IDB_SIP_ICON;

        Bitmap_t InputIcon;
        hr = InputIcon.Attach(
            GlobalData_t::s_GDICacheObject.LoadCachedBitmap(BitmapID)
            );
        ASSERT(SUCCEEDED(hr));

        //Draw the sip icon centered in the button
        pDimensions->cx = InputIcon.Width();
    }
    else
    {
        //get the window text and draw it
        if (GetWindowText(m_hwnd, TextBuffer, _countof(TextBuffer)) > 0)
        {
            ASSERT(TextBuffer[0] != L'\0');

            RECT CalculateRect = {0}; 

            PaintHelper_t::CalculateTextDimensions(
                TextBuffer,
                -1,
                Fonts_t::StandardText(),
                &CalculateRect,
                DT_CENTER | DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX
                );
            pDimensions->cx = RECTWIDTH(CalculateRect);
        }

        if (m_Data.IsMenu)
        {
            Bitmap_t PopupArrow;
            hr = PopupArrow.Attach(
                GlobalData_t::s_GDICacheObject.LoadCachedBitmap(IDB_POPUPMENU_UP_ARROW)
                );
            ASSERT(SUCCEEDED(hr));
            pDimensions->cx += (PopupArrow.Width() + Layout_t::PopupUpArrowRightMargin());
        }
    }

    pDimensions->cx += 2*Layout_t::PopupTextMargin();

    return 1;
}

/*------------------------------------------------------------------------------
    MenuButtonImpl_t::OnGetData

    Retrieve the data for this button
------------------------------------------------------------------------------*/
LRESULT
MenuButtonImpl_t::OnGetData(
    MenuButton_t::ButtonData_t* pData,
    UINT SizeInBytes
    ) const
{
    if (!pData || (SizeInBytes != sizeof(MenuButton_t::ButtonData_t)))
    {
        ASSERT(0);
        return 0;
    }

    memcpy(pData, &m_Data, sizeof(MenuButton_t::ButtonData_t));
    return 1;
}

/*------------------------------------------------------------------------------
    MenuButtonImpl_t::OnSetData

    Update the data that we are tracking
------------------------------------------------------------------------------*/
LRESULT
MenuButtonImpl_t::OnSetData(
    const MenuButton_t::ButtonData_t* pData,
    UINT SizeInBytes
    )
{
    if (!pData || (SizeInBytes != sizeof(MenuButton_t::ButtonData_t)))
    {
        ASSERT(FALSE);
        return 0;
    }

    PopupMenu_t menu;

    //get rid of the old data...
    if ( m_Data.IsMenu && m_Data.Value.PopupMenu &&
        (!pData->IsMenu || (HWND)pData->Value.PopupMenu != (HWND)m_Data.Value.PopupMenu))
    {
        menu = m_Data.Value.PopupMenu;
        menu.Destroy();
    }

    memcpy(&m_Data, pData, sizeof(MenuButton_t::ButtonData_t));

#ifdef DEBUG
    WCHAR TextBuffer[100] = TEXT("");
    GetWindowText(m_hwnd, TextBuffer, _countof(TextBuffer));
    ASSERT(!m_Data.IsInputButton || (0 == wcscmp(INPUT_BUTTON, TextBuffer)));
#endif
    return 1;
}

/*------------------------------------------------------------------------------
    MenuButtonImpl_t::OnSetText

    Handle WM_SETTEXT by forcing a redraw if the text has changed
------------------------------------------------------------------------------*/
LRESULT
MenuButtonImpl_t::OnSetText(
    const WCHAR* pText
    )
{
    if (! pText)
    {
        goto exit;
    }

    WCHAR OldText[100] = L"";
    GetWindowText(m_hwnd, OldText, _countof(OldText));

    if (wcsncmp(OldText, pText, _countof(OldText)) == 0)
    {
        return 0;
    }

    //trigger repaint
    InvalidateRect(m_hwnd, NULL, FALSE);

exit:
    return DefWindowProc(WM_SETTEXT, 0, (LPARAM)pText);
}

/*------------------------------------------------------------------------------
    MenuButtonImpl_t::OnPaint

    Handle paint requests for this button
------------------------------------------------------------------------------*/
LRESULT
MenuButtonImpl_t::OnPaint(
    HDC hdc
    )
{
    HRESULT hr;
    RECT ClientRect;
    WCHAR TextBuffer[100] = TEXT("");

    GetClientRect(m_hwnd, &ClientRect);

    PaintHelper_t paint;

    //start the painting operation
    hr = paint.Begin(m_hwnd);
    if (FAILED(hr))
    {
        return 0;
    }

    //Parent draws the background for us
    ForwardEraseBackground(paint);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品影院| 亚洲三级久久久| 欧美日韩你懂的| 欧美中文字幕亚洲一区二区va在线| 不卡视频免费播放| 91原创在线视频| 欧美三级电影一区| 6080午夜不卡| 久久久精品黄色| 国产精品无码永久免费888| 日韩理论片中文av| 亚洲福利视频一区| 极品少妇一区二区三区精品视频| 精品亚洲成a人| 高清beeg欧美| 欧美唯美清纯偷拍| 日韩三级伦理片妻子的秘密按摩| 精品成a人在线观看| 国产精品久久一卡二卡| 亚洲一区二区三区四区在线观看| 日本人妖一区二区| 国产.欧美.日韩| 欧洲国内综合视频| 精品久久国产老人久久综合| 国产精品久久久久久久久免费樱桃| 亚洲美女视频在线观看| 欧美a级一区二区| 国产一区二区在线影院| 色素色在线综合| 久久综合久久综合久久| 樱花影视一区二区| 国产酒店精品激情| 欧美日韩一区二区在线观看 | 久久综合国产精品| 国产精品视频你懂的| 亚洲人成亚洲人成在线观看图片 | 欧美日韩亚洲综合在线| 久久免费看少妇高潮| 亚洲福利电影网| 成人永久aaa| 日韩精品中文字幕一区二区三区| 中文字幕永久在线不卡| 六月丁香婷婷色狠狠久久| 99re8在线精品视频免费播放| 337p亚洲精品色噜噜| 日韩美女视频19| 国产成人精品一区二区三区网站观看| 日本道免费精品一区二区三区| 26uuuu精品一区二区| 亚洲成人av一区二区三区| 国产成人亚洲精品狼色在线| 欧美肥妇free| 亚洲一区二三区| 成人av在线播放网站| 26uuu亚洲| 韩国v欧美v日本v亚洲v| 777午夜精品视频在线播放| 一区二区在线观看免费 | 最新日韩av在线| 午夜私人影院久久久久| 欧美三级在线视频| 经典三级一区二区| 中日韩av电影| 精品免费一区二区三区| 国产伦精品一区二区三区免费迷| 欧美国产禁国产网站cc| 91福利在线看| 久久精品国产免费看久久精品| 欧美国产日韩精品免费观看| 制服丝袜中文字幕亚洲| 色婷婷综合久久久| 久久国产欧美日韩精品| 日韩一区二区在线免费观看| 亚洲成精国产精品女| 欧美日韩国产一区二区三区地区| 国产精品二区一区二区aⅴ污介绍| 国产69精品久久久久777| 亚洲国产成人私人影院tom| 国产伦理精品不卡| 国产精品毛片高清在线完整版| 黑人巨大精品欧美黑白配亚洲 | 欧美激情一区二区在线| 国产大陆a不卡| 国产精品全国免费观看高清| 99视频在线精品| 亚洲欧洲中文日韩久久av乱码| 91激情在线视频| 蜜臀av亚洲一区中文字幕| 精品国产一区二区三区四区四| 国内欧美视频一区二区| 中文无字幕一区二区三区| av电影在线观看完整版一区二区| 《视频一区视频二区| 欧美日韩小视频| 国产综合色视频| 亚洲男人的天堂一区二区| 7777精品伊人久久久大香线蕉超级流畅 | 国产精品一级片在线观看| 中文一区二区完整视频在线观看| 色婷婷久久综合| 久久精品国产久精国产爱| 国产精品乱码一区二区三区软件 | 久久超碰97人人做人人爱| 久久久高清一区二区三区| 99久久精品免费看| 免费欧美在线视频| 中文字幕一区二区三区四区| 欧美电影在线免费观看| 高清在线不卡av| 亚欧色一区w666天堂| 国产欧美一区二区精品性色 | 色综合久久六月婷婷中文字幕| 亚洲妇女屁股眼交7| 久久亚洲综合av| 欧美做爰猛烈大尺度电影无法无天| 秋霞av亚洲一区二区三| 中文字幕字幕中文在线中不卡视频| 欧美日韩和欧美的一区二区| 国产精品一区2区| 日韩综合在线视频| 中文字幕日韩一区| 日韩精品一区二区三区四区视频| 99热精品国产| 国产xxx精品视频大全| 婷婷成人综合网| 亚洲欧美激情插| 国产精品毛片高清在线完整版| 91精品国产色综合久久| 欧洲一区在线观看| 成人美女视频在线看| 国产麻豆9l精品三级站| 另类人妖一区二区av| 日韩有码一区二区三区| 国产精品无码永久免费888| 在线不卡一区二区| 欧美三级电影精品| 色狠狠av一区二区三区| 不卡一区二区在线| 国产a视频精品免费观看| 久久国产精品色婷婷| 日韩精品电影在线观看| 亚洲国产日韩av| 亚洲国产精品一区二区久久恐怖片 | 亚洲国产成人一区二区三区| 精品第一国产综合精品aⅴ| 91精品国产aⅴ一区二区| 欧美在线|欧美| 色视频成人在线观看免| 色吊一区二区三区| 在线观看日产精品| 欧美午夜一区二区| 欧美性色黄大片手机版| 欧美日韩视频一区二区| 欧美精品vⅰdeose4hd| 欧美日韩不卡一区二区| 91精品婷婷国产综合久久性色| 欧美精品在线一区二区三区| 欧美日韩国产a| 精品久久一二三区| 国产农村妇女毛片精品久久麻豆 | 色一区在线观看| 欧日韩精品视频| 91精品国产综合久久精品app| 欧美丰满少妇xxxxx高潮对白| 91精品国产综合久久久久| 日韩欧美在线观看一区二区三区| 欧美videofree性高清杂交| 精品福利视频一区二区三区| 欧美国产成人在线| 亚洲精品欧美二区三区中文字幕| 一区二区激情视频| 麻豆极品一区二区三区| 国产不卡视频一区二区三区| 99久久夜色精品国产网站| 日本高清不卡aⅴ免费网站| 欧美性欧美巨大黑白大战| 91精品国产色综合久久不卡电影| 久久青草国产手机看片福利盒子| 国产日韩欧美综合在线| 亚洲宅男天堂在线观看无病毒| 日韩成人午夜精品| 高清国产午夜精品久久久久久| 欧美在线一二三四区| 久久久精品一品道一区| 亚洲最大成人综合| 国产传媒欧美日韩成人| 欧美专区日韩专区| 久久精品视频在线看| 亚洲成人免费在线观看| 成人精品视频一区二区三区| 欧美电影在线免费观看| 最新欧美精品一区二区三区| 久久99最新地址| 欧美日韩精品欧美日韩精品一综合| 久久人人97超碰com| 日韩电影免费一区| 欧美午夜影院一区| |精品福利一区二区三区| 国产精品自拍av| 日韩一区二区在线观看|