📄 uistate.c
字号:
/*
* This file is part of Saenaru.
*
* Copyright (C) 2003 Hye-Shik Chang. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Perky$
*/
/*++
Copyright (c) 1990-1998 Microsoft Corporation, All Rights Reserved
Module Name:
UISTATE.C
++*/
/**********************************************************************/
#include "windows.h"
#include "immdev.h"
#include "saenaru.h"
#include "resource.h"
/**********************************************************************/
/* */
/* StatusWndProc() */
/* IME UI window procedure */
/**********************************************************************/
// 惑怕芒 : 喊档狼 惑怕芒捞 父甸绢瘤骨肺 捞 扁瓷阑 波敌 惑怕 wkpark
LRESULT CALLBACK StatusWndProc( hWnd, message, wParam, lParam )
HWND hWnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
{
PAINTSTRUCT ps;
HWND hUIWnd;
HDC hDC;
HBITMAP hbmpStatus;
switch (message)
{
case WM_UI_UPDATE:
InvalidateRect(hWnd,NULL,FALSE);
break;
case WM_PAINT:
hDC = BeginPaint(hWnd,&ps);
PaintStatus(hWnd,hDC,NULL,0);
EndPaint(hWnd,&ps);
break;
case WM_MOUSEMOVE:
case WM_SETCURSOR:
case WM_LBUTTONUP:
case WM_RBUTTONUP:
ButtonStatus(hWnd,message,wParam,lParam);
if ((message == WM_SETCURSOR) &&
(HIWORD(lParam) != WM_LBUTTONDOWN) &&
(HIWORD(lParam) != WM_RBUTTONDOWN))
return DefWindowProc(hWnd,message,wParam,lParam);
if ((message == WM_LBUTTONUP) || (message == WM_RBUTTONUP))
{
SetWindowLong(hWnd,FIGWL_MOUSE,0L);
SetWindowLong(hWnd,FIGWL_PUSHSTATUS,0L);
}
break;
case WM_MOVE:
hUIWnd = (HWND)GetWindowLongPtr(hWnd,FIGWL_SVRWND);
if (IsWindow(hUIWnd))
SendMessage(hUIWnd,WM_UI_STATEMOVE,wParam,lParam);
break;
case WM_CREATE:
hbmpStatus = LoadBitmap(hInst,TEXT("STATUSBMP"));
SetWindowLongPtr(hWnd,FIGWL_STATUSBMP,(LONG_PTR)hbmpStatus);
hbmpStatus = LoadBitmap(hInst,TEXT("CLOSEBMP"));
SetWindowLongPtr(hWnd,FIGWL_CLOSEBMP,(LONG_PTR)hbmpStatus);
break;
case WM_DESTROY:
hbmpStatus = (HBITMAP)GetWindowLongPtr(hWnd,FIGWL_STATUSBMP);
DeleteObject(hbmpStatus);
hbmpStatus = (HBITMAP)GetWindowLongPtr(hWnd,FIGWL_CLOSEBMP);
DeleteObject(hbmpStatus);
break;
default:
if (!MyIsIMEMessage(message))
return DefWindowProc(hWnd,message,wParam,lParam);
break;
}
return 0;
}
/**********************************************************************/
/* */
/* CheckPushedStatus() */
/* */
/**********************************************************************/
DWORD PASCAL CheckPushedStatus( HWND hStatusWnd, LPPOINT lppt)
{
POINT pt;
RECT rc;
if (lppt)
{
pt = *lppt;
ScreenToClient(hStatusWnd,&pt);
GetClientRect(hStatusWnd,&rc);
if (!PtInRect(&rc,pt))
return 0;
if (pt.y > 0)
{
if (pt.x < BTX)
return PUSHED_STATUS_HDR;
else if (pt.x < (BTX * 2))
return PUSHED_STATUS_MODE;
#if 0
else if (pt.x < (BTX * 3))
return PUSHED_STATUS_ROMAN;
#endif
}
}
return 0;
}
/**********************************************************************/
/* */
/* BTXFromCmode() */
/* */
/**********************************************************************/
int PASCAL BTXFromCmode( DWORD dwCmode)
{
if (dwCmode & IME_CMODE_FULLSHAPE)
{
return 80;
}
else
{
return 60;
}
}
/**********************************************************************/
/* */
/* PaintStatus() */
/* */
/**********************************************************************/
void PASCAL PaintStatus( HWND hStatusWnd , HDC hDC, LPPOINT lppt, DWORD dwPushedStatus)
{
HIMC hIMC;
LPINPUTCONTEXT lpIMC;
HDC hMemDC;
HBITMAP hbmpOld;
int x;
HWND hSvrWnd;
return; /* XXX */
hSvrWnd = (HWND)GetWindowLongPtr(hStatusWnd,FIGWL_SVRWND);
if (hIMC = (HIMC)GetWindowLongPtr(hSvrWnd,IMMGWLP_IMC))
{
HBITMAP hbmpStatus;
HBRUSH hOldBrush,hBrush;
// int nCyCap = GetSystemMetrics(SM_CYSMCAPTION);
int nCyCap = 0;
RECT rc;
lpIMC = ImmLockIMC(hIMC);
hMemDC = CreateCompatibleDC(hDC);
#if 0
// Paint Caption.
hBrush = CreateSolidBrush(GetSysColor(COLOR_ACTIVECAPTION));
hOldBrush = SelectObject(hDC,hBrush);
rc.top = rc.left = 0;
rc.right = BTX*3;
rc.bottom = nCyCap;
FillRect(hDC,&rc,hBrush);
SelectObject(hDC,hOldBrush);
DeleteObject(hBrush);
// Paint CloseButton.
hbmpStatus = (HBITMAP)GetWindowLongPtr(hStatusWnd,FIGWL_CLOSEBMP);
hbmpOld = SelectObject(hMemDC,hbmpStatus);
if (!(dwPushedStatus & PUSHED_STATUS_CLOSE))
BitBlt(hDC,STCLBT_X,STCLBT_Y,STCLBT_DX,STCLBT_DY,
hMemDC,0,0,SRCCOPY);
else
BitBlt(hDC,STCLBT_X,STCLBT_Y,STCLBT_DX,STCLBT_DY,
hMemDC,STCLBT_DX,0,SRCCOPY);
#endif
hbmpStatus = (HBITMAP)GetWindowLongPtr(hStatusWnd,FIGWL_STATUSBMP);
SelectObject(hMemDC,hbmpStatus);
// Paint HDR.
x = BTEMPT;
if (lpIMC->fOpen)
x = 0;
if (!(dwPushedStatus & PUSHED_STATUS_HDR))
BitBlt(hDC,0,nCyCap,BTX,BTY,hMemDC,x,0,SRCCOPY);
else
BitBlt(hDC,0,nCyCap,BTX,BTY,hMemDC,x,BTY,SRCCOPY);
// Paint MODE.
x = BTXFromCmode(lpIMC->fdwConversion);
if (!(dwPushedStatus & PUSHED_STATUS_MODE))
BitBlt(hDC,BTX,nCyCap,BTX,BTY,hMemDC,x,0,SRCCOPY);
else
BitBlt(hDC,BTX,nCyCap,BTX,BTY,hMemDC,x,BTY,SRCCOPY);
#if 0
// Paint Roman MODE.
x = BTEMPT;
if (lpIMC->fdwConversion & IME_CMODE_ROMAN)
x = BTROMA;
if (!(dwPushedStatus & PUSHED_STATUS_ROMAN))
BitBlt(hDC,BTX*2,nCyCap,BTX,BTY,hMemDC,x,0,SRCCOPY);
else
BitBlt(hDC,BTX*2,nCyCap,BTX,BTY,hMemDC,x,BTY,SRCCOPY);
#endif
#if 0
SelectObject(hMemDC,hbmpOld);
#endif
DeleteDC(hMemDC);
ImmUnlockIMC(hIMC);
}
}
/**********************************************************************/
/* */
/* GetUINextMode(hWnd,message,wParam,lParam) */
/* */
/**********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -