📄 helpdlg.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 + -