unit4.cpp

来自「本书《C++Builder与WindowsAPI经典范例》附含配套光盘包括132」· C++ 代码 · 共 119 行

CPP
119
字号
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit4.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
//颜色变量先默认为铭黄色
fboxColor = (unsigned long)RGB(255,220,100);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//新建一自定义的字体对话框
TMyFontDialog *fbox = new TMyFontDialog(this);
//打开对话框,并执行设置,修改Memo1字体和颜色
if(fbox->Execute())
  {
  Memo1->Font = fbox->Font;
  Memo1->Font->Color = (TColor)fboxColor;
  }
delete fbox;
}
//---------------------------------------------------------------------------
//以下皆为自定义字体对话框函数设置
//---------------------------------------------------------------------------
//处理当打开字体对话框与接收和处理字体对话框选项的信息
void __fastcall TMyFontDialog::WndProc(TMessage& Msg)
{
switch (Msg.Msg)
  {
  //当打开字体对话框时,增加颜色选项,颜色对话框按钮
  case WM_INITDIALOG:
     {
     //以此自定义函数即取得<颜色选择滚动条>的handle ID = 1139
     //请见最后一个函数
     //GetFontBoxItemsID_Text(Handle);
     //<1> 在<颜色选择滚动条>中新建颜色选项
     COLORREF color = (COLORREF)Form1->fboxColor;
     HWND HColorCombo = ::GetDlgItem(Handle, 1139);
     int index = SNDMSG(HColorCombo, CB_INSERTSTRING, 0,
                       reinterpret_cast<LPARAM>("自定义颜色"));
     SNDMSG(HColorCombo, CB_SETITEMDATA, index, color);
     SNDMSG(HColorCombo, CB_SETCURSEL, index, 0);
     //<2>新建颜色对话框按钮
     int width, height;
     RECT R;
     //若user需要,则可重设字体对话框尺寸和新按钮位置
     if (::GetWindowRect(Handle, &R))
        {
        width = R.right - R.left;
        height = R.bottom - R.top;
        ::SetWindowPos(Handle, NULL, 0, 0,
                       width , height,
                       SWP_NOMOVE | SWP_NOZORDER);
        }
     //建立一新自定义按钮
     HNewBtn = ::CreateWindow("BUTTON", "自定义颜色...",
                            WS_CHILD | WS_VISIBLE | BS_LEFT ,
                            20, height-65, 85, 25,
                            Handle, NULL, HInstance, NULL);
     break;
     }
  //接收和处理字体对话框选项功能
  case WM_COMMAND:
     {
     //单击<自定义色彩>按钮时,则打开色彩对话框
     if (reinterpret_cast<HWND>(Msg.LParam) == HNewBtn &&
         Msg.WParamHi == BN_CLICKED)
        {
        ShowColorDialog();
        Form1->fboxColor = (unsigned long) Font->Color;
        }
     //若直接单击<颜色选择滚动条>颜色选项时
     HWND HColorCombo = ::GetDlgItem(Handle, 1139);
     if (reinterpret_cast<HWND>(Msg.LParam) == HColorCombo &&
         Msg.WParamHi == BN_CLICKED)
        {
        //重设颜色选择滚动条<自定义颜色>选项颜色
        COLORREF color = (COLORREF)SNDMSG(HColorCombo, CB_GETITEMDATA, 0, 0);
        Font->Color = (TColor) color;
        //将选取的色彩传给色彩共同变量
        Form1->fboxColor = (unsigned long) color;
        }
     break;
     }
  }
//其余信息依照原设置执行
TFontDialog::Dispatch(&Msg);
}
//---------------------------------------------------------------------------
//当单击<自定义颜色>按钮时
void __fastcall TMyFontDialog::ShowColorDialog()
{
//在内存中配置一个颜色对话框空间
std::auto_ptr<TColorDialog> ColorDialog(new TColorDialog(NULL));
//打开颜色对话框,执行user设置
if (ColorDialog->Execute())
    {
    COLORREF color = ColorToRGB(ColorDialog->Color);
    //取得字体对话框的颜色选择滚动条<ComboBox> handle
    HWND HColorCombo = ::GetDlgItem(Handle, 1139);
    //重设颜色选择滚动条<自定义色彩>选项颜色
    SNDMSG(HColorCombo, CB_SETITEMDATA, 0, color);
    SNDMSG(HColorCombo, CB_SETCURSEL, 0, 0);
    //更改字体对话框文字颜色并传给颜色共同变量
    Font->Color = ColorDialog->Color;
    Form1->fboxColor = (unsigned long) Font->Color;
    }
}
//---------------------------------------------------------------------------
//取得字体对话框中所有组件的handle ID 与显示文字
//以此函数即取得<颜色选择滚动条>的handle ID = 1139,

⌨️ 快捷键说明

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