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

📄 helpdlg.c

📁 Windows Mobile平台的日文输入法
💻 C
字号:
//
// 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 OR INDEMNITIES.
//
/*++

	THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
	ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
	THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
	PARTICULAR PURPOSE.

	Module Name:  

	helpdlg.c

--*/
#include <windows.h>
#include "resource.h"
#include "dllmain.h"

#include "multibox.h"

extern	HWND		g_hwndMain;
extern	HWND		g_hwndHelp;
extern	HINSTANCE	g_hInstDll;
extern	HDC			g_hdcCtrl;

static	int		vnTimer;
static	int		vnAnime;
static	int		vnHelp;
static	int		vnID;
static	int		OldvnID;
static	RECT	vrcIcon;
static	HWND	vahwnd[4];

void HelpControls(int nHelp)
{
	TCHAR	ach[80];

// First, destroy any previous controls

	switch (vnHelp)
	{
	case 0:
		DestroyWindow(vahwnd[0]);
		DestroyWindow(vahwnd[1]);
		DestroyWindow(vahwnd[2]);
		DestroyWindow(vahwnd[3]);
		break;

	case 1:
	case 2:
		DestroyWindow(vahwnd[0]);
		break;

	default:
		break;
	}

// Now, remember the new screen number and create the new controls

	vnHelp = nHelp;

	switch (vnHelp)
	{
	case 0:
		LoadString(g_hInstDll, (UINT) IDS_HELP_OVER, ach, 80);
		vahwnd[0] = CreateWindow(TEXT("STATIC"), ach, WS_CHILD | WS_VISIBLE,  10,  4, 228, 16, g_hwndHelp, (HMENU) IDC_HELP_OVER,   g_hInstDll, NULL);
		vahwnd[1] = CreateWindow(TEXT("STATIC"), TEXT(""), WS_CHILD | WS_VISIBLE, 48, 52, 184, 30, g_hwndHelp, (HMENU) IDC_HELP_PROMPT, g_hInstDll, NULL);
		vahwnd[2] = CreateWindow(TEXT("STATIC"), TEXT(""), WS_CHILD | WS_VISIBLE,  2, 82, 228, 60, g_hwndHelp, (HMENU) IDC_HELP_EXTRA,  g_hInstDll, NULL);
		LoadString(g_hInstDll, (UINT) IDS_HELP_UNDER, ach, 80);
		vahwnd[3] = CreateWindow(TEXT("STATIC"), ach, WS_CHILD | WS_VISIBLE,  10, 142, 228, 16, g_hwndHelp, (HMENU) IDC_HELP_UNDER,  g_hInstDll, NULL);
		break;

	case 1:
	case 2:
		vahwnd[0] = CreateWindow(TEXT("STATIC"), TEXT(""), WS_CHILD | WS_VISIBLE, 4, 20, 220, 128, g_hwndHelp, (HMENU) IDC_HELP_PROMPT, g_hInstDll, NULL);
		break;

	default:
		break;
	}

	InvalidateRect(g_hwndHelp, NULL, TRUE);
}

void HelpSetControls()
{
	TCHAR	ach[400];

	switch (vnHelp)
	{
	case 0:
		if (vnID >= IDC_BACKSP)
			LoadString(g_hInstDll, (UINT) (vnID - IDC_BACKSP + IDS_HELP_HELP), ach, 400);
		else
			ach[0] = TEXT('\0');

		SetWindowText(GetDlgItem(g_hwndHelp, IDC_HELP_PROMPT), ach);

		if (vnID >= IDC_BACKSP)
			LoadString(g_hInstDll, (UINT) (vnID - IDC_BACKSP + IDS_EXTRA_EXTRA), ach, 400);
		else
			LoadString(g_hInstDll, (UINT) IDS_HELP_INTRO, ach, 400);

		if (ach[0] == TEXT('.'))
			ach[0] = TEXT('\0');

		SetWindowText(GetDlgItem(g_hwndHelp, IDC_HELP_EXTRA), ach);

		ShowWindow(GetDlgItem(g_hwndHelp, IDC_HELP_UNDER), SW_HIDE);
		ShowWindow(GetDlgItem(g_hwndHelp, IDOK), SW_HIDE);

		break;

	default:
		break;
	}

	ShowWindow(GetDlgItem(g_hwndHelp, IDC_BACK), vnHelp ? SW_SHOW : SW_HIDE);

// Force a full repaint

	InvalidateRect(g_hwndHelp, NULL, TRUE);
}

void HelpShowIcon()
{
	PAINTSTRUCT	ps;
	HBRUSH		hbr;

	if (vnHelp)
		return;

	BeginPaint(g_hwndHelp, &ps);

	// Create a brush with the standard dialog background color.
	hbr = CreateSolidBrush(GetSysColor(COLOR_STATIC));
	hbr = (HBRUSH)(SelectObject(ps.hdc, hbr));

	// Erase any previous button image	
	PatBlt(ps.hdc, 6, 24, 40, 56, PATCOPY);

	// Restore the original brush and free the memory from the brush we just 
	// created.
	hbr = (HBRUSH)(SelectObject(ps.hdc, hbr));
	DeleteObject(hbr);

	switch (vnID)
	{
	case IDC_BACKSP:
		BitBlt(ps.hdc, 8, 54, BCKSP_BUTTON_WIDTH, SMALL_BUTTON_HEIGHT, g_hdcCtrl, vnAnime == 3 ? LARGE_BUTTON_WIDTH : 0, BMP_ROW_BACKSP, SRCCOPY);
		break;

	case IDC_ESCAPE:
		BitBlt(ps.hdc, 8, 54, ESCAP_BUTTON_WIDTH, SMALL_BUTTON_HEIGHT, g_hdcCtrl, vnAnime == 3 ? LARGE_BUTTON_WIDTH : 0, BMP_ROW_ESCAPE, SRCCOPY);
		break;

	case IDC_QUERY:
		BitBlt(ps.hdc, 8, 54, QUERY_BUTTON_WIDTH, SMALL_BUTTON_HEIGHT, g_hdcCtrl, vnAnime == 3 ? LARGE_BUTTON_WIDTH : 0, BMP_ROW_HELP, SRCCOPY);
		break;

	case IDC_WIDTH:
		BitBlt(ps.hdc, 8, 54, LARGE_BUTTON_WIDTH, LARGE_BUTTON_HEIGHT, g_hdcCtrl, vnAnime == 3 ? LARGE_BUTTON_WIDTH : 0, BMP_ROW_ZENKAKU, SRCCOPY);
		break;

	case IDC_SUJI:
		BitBlt(ps.hdc, 8, 54, LARGE_BUTTON_WIDTH, LARGE_BUTTON_HEIGHT, g_hdcCtrl, vnAnime == 3 ? LARGE_BUTTON_WIDTH : 0, BMP_ROW_SUJI, SRCCOPY);
		break;

	case IDC_RECOG:
		BitBlt(ps.hdc, 8, 54, LARGE_BUTTON_WIDTH, LARGE_BUTTON_HEIGHT, g_hdcCtrl, vnAnime == 3 ? LARGE_BUTTON_WIDTH : 0, BMP_ROW_RECOG, SRCCOPY);
		break;

	case IDC_ENTER:
		BitBlt(ps.hdc, 8, 54, LARGE_BUTTON_WIDTH, LARGE_BUTTON_HEIGHT, g_hdcCtrl, vnAnime == 3 ? LARGE_BUTTON_WIDTH : 0, BMP_ROW_ENTER, SRCCOPY);
		break;

	case IDC_SPACE:
		BitBlt(ps.hdc, 8, 54, LARGE_BUTTON_WIDTH, LARGE_BUTTON_HEIGHT, g_hdcCtrl, vnAnime == 3 ? LARGE_BUTTON_WIDTH : 0, BMP_ROW_SPACE, SRCCOPY);
		break;

	case IDC_CONVERT:
		BitBlt(ps.hdc, 8, 54, LARGE_BUTTON_WIDTH, LARGE_BUTTON_HEIGHT, g_hdcCtrl, vnAnime == 3 ? LARGE_BUTTON_WIDTH : 0, BMP_ROW_CONVERT, SRCCOPY);
		break;

	case IDC_PAD:
		BitBlt(ps.hdc, 8, 36, LARGE_BUTTON_WIDTH, WRITE_BUTTON_HEIGHT, g_hdcCtrl, 0, BMP_ROW_PAD, SRCCOPY);
		break;

	default:
		break;
	}

	EndPaint(g_hwndHelp, &ps);
}

void AnimateHelpIcon()
{
	if(OldvnID == IDC_PAD && vnID == IDC_PAD){
		return;
	}
	OldvnID = vnID;

	vnAnime++;

	switch (vnAnime)
	{
	case 1:
	case 2:
		break;

	case 3:
		InvalidateRect(g_hwndHelp, &vrcIcon, FALSE);
		break;

	case 4:
		vnAnime = 0;
		InvalidateRect(g_hwndHelp, &vrcIcon, FALSE);
		break;
	}
}

BOOL CALLBACK HelpDlgProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
	switch (msg)
	{
	case WM_COMMAND:
		switch (LOWORD(wp))
		{
		case IDCANCEL:
			PostMessage(g_hwndMain, HELP_WM_QUIT, 0, 0);
			break;

		case IDOK:
			HelpControls(vnHelp + 1);
			HelpSetControls();
			break;

		case IDC_BACK:
			HelpControls(vnHelp - 1);
			HelpSetControls();
			break;
		}
		break;

	case WM_DESTROY:
		HelpControls(-1);
		KillTimer(hwnd, vnTimer);
		break;

	case WM_INITDIALOG:
		vnHelp = -1;
		vnID = -1;
		OldvnID = -1;
		vrcIcon.left   = 6;
		vrcIcon.top    = 24;
		vrcIcon.right  = 46;
		vrcIcon.bottom = 80;
		vnAnime = 0;
		vnTimer = SetTimer(hwnd, TIMER_ID_HELP, 500, NULL);
		break;

	case WM_PAINT:
		HelpShowIcon();
		DefWindowProc(hwnd, msg, wp, lp);
		break;

	case HELP_WM_START:
		HelpControls(0);
		HelpSetControls();
		break;

	case WM_TIMER:
		AnimateHelpIcon();
		break;

	case HELP_WM_COMMAND:
		if (vnHelp == 0 && vnID != (int)wp)
		{
			vnID = wp;
			HelpSetControls();
		}
		break;

	default:
		break;
	}

	return FALSE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -