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

📄 unit2.cpp

📁 本书《C++Builder与WindowsAPI经典范例》附含配套光盘包括132个WindowsAPI函数及206个完整、可执行的实例
💻 CPP
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
//新按钮的默认标题与按钮文字
str = "YES! 我是独立且彩色的按钮!";
//默认新按钮尺寸、位置
RECT btR = {0, 0, 100, 100};
//建立一个多行文字、可移动、彩色文字、彩色背景的按钮窗口
HStatic = ::CreateWindow("BUTTON", str.c_str(),
                         WS_CAPTION | WS_VISIBLE | WS_CHILD
                         | SS_CENTER | WS_SIZEBOX
                         | BS_MULTILINE | BS_OWNERDRAW,
                         btR.left, btR.top,
                         btR.right - btR.left, btR.bottom - btR.top,
                         Handle, NULL, HInstance, NULL);
}
//---------------------------------------------------------------------------
//新按钮需重绘时,即送出此信息
void __fastcall TForm1::WMDrawItem(TMessage &Msg)
{
//<1>基本信息取得与整理
//由LParam信息指向按钮LPDRAWITEMSTRUCT结构
LPDRAWITEMSTRUCT lpdis = (DRAWITEMSTRUCT *)Msg.LParam;
//若非新按钮,就依照默认信息处理
if (lpdis->hwndItem != HStatic)
   {
   TForm::Dispatch(&Msg);
   return;
   }
//从DRAWITEMSTRUCT结构取得有用信息
HDC Hdc = lpdis->hDC;
RECT R = lpdis->rcItem;
//取得按钮是否在鼠标单击选取状态
unsigned int uState = lpdis->itemState;
//设置按钮为浮起状态
unsigned int uDrawSytle = DFCS_BUTTONPUSH;
//按钮文字的偏移量
int text_offset = 0;
//若按钮在鼠标单击选取状态,则边沿呈现凹陷光影与
//文字偏移量向右下方加3位图
if (uState & ODS_SELECTED)
  {
  uDrawSytle = uDrawSytle | DFCS_PUSHED;
  text_offset+=3;
  }
//<2>先绘制按钮背景与边框
//将对象绘制出指定型态与状态
::DrawFrameControl(Hdc, &R, DFC_BUTTON, uDrawSytle);
//按钮背景的范围
RECT r = {R.left+3,R.top+3,
          R.right-3,R.bottom-3};
//建立一新彩色画笔,填满按钮背景
HBRUSH hbr = ::CreateSolidBrush(RGB(200,0,200));
::FillRect(Hdc, &r, hbr);
//<3>再绘制按钮文字
//先设置字体背景为透明状态
unsigned int iOldMode = ::SetBkMode(Hdc, TRANSPARENT);
//确定偏移量
::OffsetRect(&r, text_offset, text_offset);
//设置文字色彩
::SetTextColor( Hdc, RGB(180,230,255));
//::SetBkColor( Hdc, ColorToRGB(clBlue));
//在按钮上绘出文字
::DrawText(Hdc, str.c_str(),
           str.Length(),
           &r,
           DT_CENTER | DT_VCENTER | DT_WORDBREAK);
//恢复原有背景
::SetBkMode(Hdc, iOldMode);
Msg.Result = true;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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