📄 uistatus.c
字号:
/*
* Copyright (C) 1999.4 Li ZhenChun
*
* 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 is 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., 675 Mass Ave, Cambridge, M A 02139, USA.
*
* Author: Li ZhenChun email: zhchli@163.net or zhchli@126.com
*
*/
#include "freepy.h"
#define HELPFILENAME _T("freepy.hlp")
#define TIMEID 1
#define TIMEOUT 600
#define BITMAPX 20
#define BITMAPY 20
#define BITMAPCHINESEDES 60
#define BITMAPFULLDES 80
#define BITMAPPUNCTDES 100
#define BITMAPCHINESESRC 60
#define BITMAPFULLSRC 100
#define BITMAPPUNCTSRC 140
#define BUTTONMENU 0x01
#define BUTTONPY 0x02
#define BUTTONCHINESE 0x04
#define BUTTONFULL 0x08
#define BUTTONPUNCT 0x10
#define BUTTONPUSH 0x8000
#define SETFUZZY 0x01
#define SETSORT 0x02
static HBITMAP hBmpStatus;
void PaintStatus( HWND,HDC,DWORD);
DWORD CheckButtonPos( HWND , LPPOINT);
BOOL WINAPI SetDialogProc(HWND,UINT,WPARAM,LPARAM);
BOOL WINAPI AboutDialogProc(HWND,UINT,WPARAM,LPARAM);
LRESULT WINAPI StatusWndProc(
HWND hWnd ,
UINT message ,
WPARAM wParam ,
LPARAM lParam )
{
static BOOL fCanMove = FALSE;
static POINT ptdif;
static RECT drc;
static SIZE sz;
static DWORD dwButton;
DWORD dwT;
POINT pt;
HDC hDC;
HKEY hKey,hChildKey;
DWORD dwDisposition;
hDC = GetDC(hWnd);
switch (message)
{
case WM_CREATE:
hBmpStatus = LoadBitmap(hInst,MAKEINTRESOURCE(STATUSBITMAP));
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hPaintDC;
hPaintDC = BeginPaint(hWnd,&ps);
PaintStatus(hWnd ,hPaintDC, 0);
EndPaint(hWnd,&ps);
break;
}
case WM_TIMER:
KillTimer(hWnd,TIMEID);
SetCursor(LoadCursor(NULL,IDC_SIZEALL));
fCanMove = TRUE;
dwButton &= ~BUTTONPUSH;
PaintStatus(hWnd,hDC,dwButton);
break;
case WM_SETCURSOR:
if ( HIWORD(lParam) == WM_LBUTTONDOWN ) {
SetCapture(hWnd);
GetCursorPos( &pt );
GetWindowRect(hWnd,&drc);
ptdif.x = pt.x - drc.left;
ptdif.y = pt.y - drc.top;
sz.cx = drc.right - drc.left;
sz.cy = drc.bottom - drc.top;
SetWindowLong(hWnd,FIGWL_MOUSE,FIM_CAPUTURED);
dwButton = CheckButtonPos( hWnd, &pt);
dwButton |= BUTTONPUSH;
PaintStatus(hWnd,hDC,dwButton);
if( dwButton & BUTTONPY)
SetTimer(hWnd,TIMEID,1,NULL);
else
SetTimer(hWnd,TIMEID,TIMEOUT,NULL);
}
else
return DefWindowProc(hWnd,message,wParam,lParam);
break;
case WM_LBUTTONUP:
KillTimer(hWnd,TIMEID);
ReleaseCapture();
if( fCanMove ) {
dwT = GetWindowLong(hWnd,FIGWL_MOUSE);
if (dwT & FIM_MOVED) {
DrawUIBorder(&drc);
GetCursorPos( &pt );
MoveWindow(hWnd,pt.x - ptdif.x,
pt.y - ptdif.y,
sz.cx,
sz.cy,TRUE);
}
SetCursor(LoadCursor(NULL,IDC_ARROW));
}
else{
if( dwButton & BUTTONCHINESE ) {
HWND hSvrWnd;
HIMC hIMC;
LPINPUTCONTEXT lpIMC;
hSvrWnd = (HWND)GetWindowLong(hWnd,FIGWL_SVRWND);
hIMC = (HIMC)GetWindowLong(hSvrWnd,IMMGWL_IMC);
lpIMC = ImmLockIMC(hIMC);
if(lpIMC->fOpen) {
lpIMC->fOpen=FALSE;
MakeResultString(hIMC,FALSE);
}
else lpIMC->fOpen=TRUE;
}
if( dwButton & BUTTONFULL){
if(wConversionSet & CONVERSION_SET_FULLSHAPE)
wConversionSet &= ~CONVERSION_SET_FULLSHAPE;
else
wConversionSet |= CONVERSION_SET_FULLSHAPE;
}
if( dwButton & BUTTONPUNCT ){
if(wConversionSet & CONVERSION_SET_PUNCT)
wConversionSet &= ~CONVERSION_SET_PUNCT;
else
wConversionSet |= CONVERSION_SET_PUNCT;
}
if( dwButton & BUTTONMENU ){
HMENU hMenu,hSubMenu;
POINT pt;
int cmd;
hMenu = LoadMenu(hInst, MAKEINTRESOURCE(FREEPYMENU));
hSubMenu = GetSubMenu(hMenu,0);
pt.x = 0;
pt.y = 0;
ClientToScreen(hWnd, &pt);
cmd = TrackPopupMenu(hSubMenu,
TPM_LEFTALIGN | TPM_BOTTOMALIGN | TPM_RETURNCMD,
pt.x,
pt.y,
0,
hWnd,
NULL);
switch (cmd) {
case IDM_SET:
DialogBox( hInst,MAKEINTRESOURCE(DIALOGSET),NULL,SetDialogProc);
InvalidateRect(hWnd,NULL,FALSE);
break;
case IDM_HELP:
{
TCHAR szHelpFileName[100];
LPTSTR lpHelpFileName;
lpHelpFileName = szHelpFileName;
lpHelpFileName += GetSystemDirectory(szHelpFileName,100);
if (*(lpHelpFileName-1) != _T('\\'))
*lpHelpFileName++ = _T('\\');
_tcscpy(lpHelpFileName,HELPFILENAME);
WinHelp(NULL,szHelpFileName,HELP_CONTENTS,0);
InvalidateRect(hWnd,NULL,FALSE);
}
break;
case IDM_ABOUT:
DialogBox( hInst,MAKEINTRESOURCE(DIALOGABOUT),NULL,AboutDialogProc);
InvalidateRect(hWnd,NULL,FALSE);
break;
default:
break;
}
if (hMenu) DestroyMenu(hMenu);
}
dwButton &= ~BUTTONPUSH;
PaintStatus(hWnd,hDC,dwButton);
}
SetWindowLong(hWnd,FIGWL_MOUSE,0);
fCanMove = FALSE;
break;
case WM_MOUSEMOVE:
if( fCanMove ) {
dwT = GetWindowLong(hWnd,FIGWL_MOUSE);
if (dwT & FIM_MOVED) {
DrawUIBorder(&drc);
GetCursorPos( &pt );
drc.left = pt.x - ptdif.x;
drc.top = pt.y - ptdif.y;
drc.right = drc.left + sz.cx;
drc.bottom = drc.top + sz.cy;
DrawUIBorder(&drc);
}
else if (dwT & FIM_CAPUTURED)
{
DrawUIBorder(&drc);
SetWindowLong(hWnd,FIGWL_MOUSE,dwT | FIM_MOVED);
}
}
// else KillTimer(hWnd,TIMEID);
break;
case WM_DESTROY:
DeleteObject(hBmpStatus);
break;
case WM_MOVE:
if ( RegOpenKeyEx(HKEY_LOCAL_MACHINE,
_T("Software"),
0,
KEY_READ,
&hKey) == ERROR_SUCCESS ){
if( RegCreateKeyEx( hKey,
_T("freepy"),
0,
NULL,
REG_OPTION_NON_VOLATILE ,
KEY_ALL_ACCESS ,
NULL,
&hChildKey,
&dwDisposition ) == ERROR_SUCCESS) {
RegSetValueEx(hChildKey,
_T("Position"),
0,
REG_DWORD,
(LPBYTE)&lParam,
sizeof(DWORD));
RegCloseKey(hChildKey);
}
RegCloseKey(hKey);
}
break;
default:
if (!MyIsIMEMessage(message))
return DefWindowProc(hWnd,message,wParam,lParam);
break;
}
ReleaseDC(hWnd,hDC);
return 0;
}
void CreateStatusWindow( HWND hUIWnd, LPUIEXTRA lpUIExtra)
{
if (!IsWindow(lpUIExtra->uiStatus.hWnd))
{
RECT screenrc;
HKEY hKey;
DWORD dwPosition,dwData=sizeof(DWORD);
BOOL fFlag=TRUE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -