⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uistatus.c

📁 拼音输入法源码vc开发的
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
 * 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 + -