VC++ 2010中实现自定义窗口按钮控件
使用 VBA 创建自定义工具栏和功能按钮

使用 VBA 创建自定义工具栏和功能按钮自动化办公已经成为现代工作生活中必不可少的一部分。
为了提高工作效率,Microsoft Office 中的VBA(Visual Basic for Applications)成为了非常有用的工具。
在本文中,我们将学习如何使用VBA创建自定义工具栏和功能按钮,以便更好地适应我们的任务需求。
首先,让我们了解一下VBA是什么。
VBA是一种编程语言,专门用于Microsoft Office套件中的自动化任务和自定义应用程序。
通过使用VBA,我们可以根据自己的需求创建自定义功能,从而提高我们的工作效率。
创建自定义工具栏是使用VBA的第一步。
通过自定义工具栏,我们可以将我们最常用的命令和功能组织成一个便捷的工具栏,以便我们可以更轻松地使用这些功能。
下面是一些创建自定义工具栏的步骤:1. 打开Microsoft Office应用程序(如Word、Excel或PowerPoint)并进入“开发”选项卡(如果没有,需要先启用它)。
点击“自定义工具栏”按钮,选择“新建工具栏”。
2. 在弹出的对话框中,输入工具栏的名称,并选择工具栏的位置(例如,将其放置在菜单栏或快速访问工具栏下方)。
点击“确定”。
3. 打开VBA编辑器(按下Alt + F11),在左侧的“VBAProject”窗格中选择要编辑的文档(例如,“ThisWorkbook”或“Sheet1”)。
点击“插入”,然后选择“模块”。
4. 在新插入的模块中,我们可以编写与我们想要添加到工具栏的命令和功能对应的VBA代码。
例如,如果我们想要添加一个剪切文本的按钮,我们可以编写以下代码:```Sub CutText()Selection.CutEnd Sub```5. 保存并关闭VBA编辑器。
我们会回到Microsoft Office应用程序的主界面。
6. 右击自定义工具栏,选择“自定义工具栏”>“新建命令”,在弹出的对话框中选择“宏”,然后选择我们在VBA编辑器中创建的宏(在上面的例子中是“CutText”)。
VC单选按钮使用

VC单选按钮使用一、VC单选按钮的基本用法为了实现单选的效果,我们需要将所有的单选按钮分组。
可以使用“组框”控件来为一组单选按钮提供一个可视的边界。
然后,将每个单选按钮的属性“所属组”设置为该组框控件。
这样,用户只能在同一个组中选择一个选项。
二、VC单选按钮的属性设置除了所属组外,VC单选按钮还有其他一些重要的属性需要设置。
1.文本属性:用于显示单选按钮的文本。
可以通过在控件资源设计器中输入文本来设置。
2.默认状态:可以设置单选按钮在初始状态下被选中还是未选中。
可以通过在资源设计器中选择单选按钮并设置其属性“默认”来设置。
3.可见性:可以设置单选按钮是否可见。
可以通过设置属性“可见性”来实现。
4.启用状态:可以设置单选按钮是否可用。
可以通过设置属性“启用状态”来实现。
5.位置和大小:可以设置单选按钮在对话框中的位置和大小,以适应界面布局。
可以通过调整属性“位置”和“大小”来实现。
三、VC单选按钮的事件处理当用户选择一个单选按钮时,我们通常需要处理相应的事件。
处理事件的方式有很多,下面是一种常见的方式:通过给每个单选按钮关联一个事件处理程序。
首先,在资源设计器中选择单选按钮,并右键单击选择“属性”。
在属性面板中选择“事件”,然后选择对应的事件(如“单击”)。
然后,输入或选择一个事件处理程序的函数名。
在创建的事件处理程序函数中,我们可以执行任何我们希望在用户选择该单选按钮时执行的操作。
例如,我们可以更新其他控件的状态,执行计算或显示相关信息。
四、VC单选按钮的最佳实践在设计和使用VC单选按钮时2.分组和布局:将需要选择的选项分组,并使用边框或其他可视元素将它们分隔开。
合理布局和对齐这些组框和单选按钮,以方便用户选择。
3.默认选项:根据用户的使用习惯和需求,设置一个默认的选项。
这有助于用户快速完成任务,减少不必要的操作。
4.禁用选项:根据情况,禁用一些选项,以防止用户选择不合适的选项。
5.状态更新:当用户选择一个单选按钮时,考虑更新其他相关控件的状态,以提供一致和准确的反馈给用户。
VS2010和MFC编程入门之54(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)

VS2010MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)理解了为Ribbon Bar添加控件的方法。
这里继续完善前面的实例,讲解一些稍复杂的控件的添加方法,及如何为它们添加消息处理函数。
一、为Ribbon Bar添加更多Ribbon控件将在上一节实例的基础上,继续添加下拉菜单、Check Box、Combo Box等Ribbon控件。
1、首先把“Small Button”面板上的“Click”按钮改造成一个下拉菜单。
“Click”按钮有一个Behavior属性Menu Items,默认为Empty,选中它右侧会出现一个浏览按钮,点击浏览按钮会弹出“Items Editor”对话框,如下图:我们可以在上图Items下的组合框中选择按钮、分割线等,点击组合框右侧的Add按钮将其添加到下拉菜单中,添加按钮后在Properties分组中可以设置Caption(标题)、ID、Image(图片)等属性。
鸡啄米这里添加两个按钮,Caption属性分别为One Click、Double Click,ID分别为ID_ONE_CLICK、ID_DOUBLE_CLICK,Image等属性就不设置了。
此时的Ribbon Bar如下图:“Click”右侧多了一个向下的箭头,运行程序后点击此箭头会显示包含One Click和Double Click按钮的下拉菜单。
另外,上图中有一个按钮鸡啄米用红线指示了其提示信息-“Test Ribbon”,点击了此按钮我们就可以不运行程序而直接查看Ribbon界面效果。
2、在Small Button面板的右侧再添加一个面板“More Controls”,然后在Toolbox工具中找到Check Box和Combo Box控件拖入新面板,Check Box的Caption 属性设为“Websites Enable”,Combo Box的属性设为“Websites”。
(二)c#Winform自定义控件-按钮-HZHControls

(⼆)c#Winform⾃定义控件-按钮-HZHControls 官⽹前提⼊⾏已经7,8年了,⼀直想做⼀套漂亮点的⾃定义控件,于是就有了本系列⽂章。
如果觉得写的还⾏,请点个 star ⽀持⼀下吧欢迎前来交流探讨:企鹅群568015492⽬录准备⼯作该控件将继承基类控件UCControlBase,如果你还对UCControlBase不了解的下,请移步查看⾸先我们了解下要做的是什么,我们需要做⼀个可以⾃定义填充颜⾊,有圆⾓边框,有⾓标的按钮开始添加⼀个⽤户控件,命名为UCBtnExt ,继承 UCControlBase先来看看我们按钮需要⽀持的属性吧1#region字段属性2 [Description("是否显⽰⾓标"), Category("⾃定义")]3public bool IsShowTips4 {5get6 {7return this.lblTips.Visible;8 }9set10 {11this.lblTips.Visible = value;12 }13 }1415 [Description("⾓标⽂字"), Category("⾃定义")]16public string TipsText17 {18get19 {20return this.lblTips.Text;21 }22set23 {24this.lblTips.Text = value;25 }26 }2728private Color _btnBackColor = Color.White;29 [Description("按钮背景⾊"), Category("⾃定义")]30public Color BtnBackColor31 {32get { return _btnBackColor; }33set34 {35 _btnBackColor = value;36this.BackColor = value;37 }38 }3940private Color _btnForeColor = Color.Black;41///<summary>42///按钮字体颜⾊43///</summary>44 [Description("按钮字体颜⾊"), Category("⾃定义")]45public Color BtnForeColor46 {47get { return _btnForeColor; }48set50 _btnForeColor = value;51this.lbl.ForeColor = value;52 }53 }5455private Font _btnFont = new System.Drawing.Font("微软雅⿊", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); 56///<summary>57///按钮字体58///</summary>59 [Description("按钮字体"), Category("⾃定义")]60public Font BtnFont61 {62get { return _btnFont; }63set64 {65 _btnFont = value;66this.lbl.Font = value;67 }68 }6970///<summary>71///按钮点击事件72///</summary>73 [Description("按钮点击事件"), Category("⾃定义")]74public event EventHandler BtnClick;7576private string _btnText;77///<summary>78///按钮⽂字79///</summary>80 [Description("按钮⽂字"), Category("⾃定义")]81public string BtnText82 {83get { return _btnText; }84set85 {86 _btnText = value;87 lbl.Text = value;88 }89 }90#endregion有了属性是不是就更明了呢还有最后关键的⼀点东西,就是按钮的点击事件1private void lbl_MouseDown(object sender, MouseEventArgs e)2 {3if (this.BtnClick != null)4 BtnClick(this, e);5 }⾄此基本上就完⼯了,下⾯列出了完整的代码1// 版权所有黄正辉交流群:568015492 QQ:6231286292// ⽂件名称:UCBtnExt.cs3// 创建⽇期:2019-08-15 15:57:364// 功能描述:按钮5// 项⽬地址:https:///kwwwvagaa/net_winform_custom_control67using System;8using System.Collections.Generic;9using ponentModel;10using System.Drawing;11using System.Data;12using System.Linq;13using System.Text;14using System.Windows.Forms;1516namespace HZH_Controls.Controls17 {18 [DefaultEvent("BtnClick")]19public partial class UCBtnExt : UCControlBase20 {21#region字段属性22 [Description("是否显⽰⾓标"), Category("⾃定义")]23public bool IsShowTips24 {25get26 {27return this.lblTips.Visible;29set30 {31this.lblTips.Visible = value;32 }33 }3435 [Description("⾓标⽂字"), Category("⾃定义")]36public string TipsText37 {38get39 {40return this.lblTips.Text;41 }42set43 {44this.lblTips.Text = value;45 }46 }4748private Color _btnBackColor = Color.White;49 [Description("按钮背景⾊"), Category("⾃定义")]50public Color BtnBackColor51 {52get { return _btnBackColor; }53set54 {55 _btnBackColor = value;56this.BackColor = value;57 }58 }5960private Color _btnForeColor = Color.Black;61///<summary>62///按钮字体颜⾊63///</summary>64 [Description("按钮字体颜⾊"), Category("⾃定义")]65public Color BtnForeColor66 {67get { return _btnForeColor; }68set69 {70 _btnForeColor = value;71this.lbl.ForeColor = value;72 }73 }7475private Font _btnFont = new System.Drawing.Font("微软雅⿊", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); 76///<summary>77///按钮字体78///</summary>79 [Description("按钮字体"), Category("⾃定义")]80public Font BtnFont81 {82get { return _btnFont; }83set84 {85 _btnFont = value;86this.lbl.Font = value;87 }88 }8990///<summary>91///按钮点击事件92///</summary>93 [Description("按钮点击事件"), Category("⾃定义")]94public event EventHandler BtnClick;9596private string _btnText;97///<summary>98///按钮⽂字99///</summary>100 [Description("按钮⽂字"), Category("⾃定义")]101public string BtnText102 {103get { return _btnText; }104set105 {106 _btnText = value;107 lbl.Text = value;108 }109 }110#endregion111public UCBtnExt()113 InitializeComponent();114this.TabStop = false;115 }116117private void lbl_MouseDown(object sender, MouseEventArgs e)118 {119if (this.BtnClick != null)120 BtnClick(this, e);121 }122 }123 }View Code1namespace HZH_Controls.Controls2 {3public partial class UCBtnExt4 {5///<summary>6///必需的设计器变量。
VC控件随窗口大小变化而变化的方法

VC控件随窗口大小变化而变化的方法在VC中,控件随窗口大小变化而变化的方法有多种实现方式。
下面将介绍一种比较常用的方法。
方法一:使用控件的锚点属性3.根据需要,可以调整锚点的位置和大小。
4. 在对话框的OnSize函数中添加控件调整的代码。
示例代码如下:```void CMyDialog::OnSize(UINT nType, int cx, int cy)CDialogEx::OnSize(nType, cx, cy);//获取对话框的客户区大小CRect rect;GetClientRect(&rect);//调整控件的大小和位置m_btnOK.SetWindowPos(NULL, rect.right - 100, rect.bottom - 100, 0, 0, SWP_NOZORDER , SWP_NOSIZE);```在这个示例代码中,m_btnOK是一个按钮控件的变量。
调用SetWindowPos函数可以设置控件的位置和大小。
rect.right和rect.bottom分别表示对话框客户区的右边界和底边界的坐标。
在此示例中,按钮的右下角离对话框的右下角保持了100个像素的距离。
需要注意的是,OnSize函数中必须调用基类的OnSize函数,以确保窗口的基本布局正常。
总结:使用锚点属性和OnSize函数可以实现控件随窗口大小变化而变化。
通过设置锚点的位置和大小,再在OnSize函数中根据对话框的大小调整控件的大小和位置,可以适应不同窗口大小的需求。
这种方法是比较简单、快速实现的方式,特别适用于需要调整的控件数量较少的情况。
除了使用锚点属性和OnSize函数外,还可以使用其他方式实现控件随窗口大小变化,比如使用MoveWindow函数或者使用布局管理器等。
在实际开发中,需要根据具体情况选择合适的方法。
winform自定义控件开发

自定义控件开发一般而言,Visual Studio 2005中自带的几十种控件已经足够我们使用了,但是,在一些特殊的需求中,可能需要一些特殊的控件来与用户进行交互,这时,就需要我们自己开发新的、满足用户需求的控件。
要开发自己的控件,有几种方法:❶复合控件(Composite Controls):将现有的各种控件组合起来,形成一个新的控件,来满足用户的需求。
❷扩展控件(Extended Controls):就是在现有的控件基础上,派生出一个新的控件,增加新的功能,或者修改原有功能,来满足用户需求。
❸自定义控件(Custom Controls):就是直接从System.Windows.Forms.Control 类派生,也就是说完全由自己来设计、实现一个全新的控件,这是最灵活、最强大的方法,但是,对开发者的要求也是最高的。
要实现一个自定义控件,必须为Control类的的OnPaint事件编写代码,在OnPaint事件中实现自定义控件的绘制工作。
同时,还可以重写Control类的WndProc方法,来处理底层的Windows消息。
所以说,要实现一个自定义控件,对开发者的要求较高,要求开发者必须了解GDI+和Windows API的知识。
下面我们就分别给大家介绍这三种方法。
❶复合控件(Composite Controls)复合控件实际上是控件的集合,类似于堆积木。
因此,可以按照用户的需求,把VS 2005工具箱中的控件任意组合起来,形成一个复合控件。
在以后使用中,将生成的这个复合控件作为一个控件来对待。
复合控件一般都是从UserControl类派生而来,因此复合控件(用户控件)可以在“UserControl测试容器”中进行测试。
复合控件的创建步骤:第一步:新建一个Windows控件库项目“CompositeControlDemo”第二步:向复合控件中添加Visual Studio 2005中的控件组合。
C#给Winform的button等控件添加快捷键三种方法

C#给Winform的button等控件添加快捷键三种方法第一种:Alt + *(按钮快捷键)在大家给button、label、menuStrip等控件设置Text属性时在名字后边加&键名就可以了,比如button1.text= "确定(&O)"。
就会有快捷键了,这时候按Alt+O就可以执行按钮单击事件。
第二种:Ctrl+*及其他组合键在WinForm中设置要使用组合键的窗体的KeyPreview(向窗体注册键盘事件)属性为True;然后使用窗体的KeyDown事件(在首次按下某个键时发生).实例代码:private void ***_KeyDown(object sender, KeyEventArgs e){if (e.KeyCode == Keys.F && e.Control){button1.PerformClick(); //执行单击button1的动作}}注:1、***代表窗体名称,大家可以看一下”Keys”的枚举参数,以实现自己需要2、还有一个问题,当使用Ctrl + *快捷键时,对于焦点在可写的控件(如TextBox)上时,可能会将* 键值同时输入,则需要加另一句话将Handled设置为true,以取消 KeyPress 事件。
即:private void ***_KeyDown(object sender, KeyEventArgs e){if (e.KeyCode == Keys.F && e.Control){e.Handled = true; //将Handled设置为true,指示已经处理过KeyPress事件button1.PerformClick();}}第三种:还是以button为例。
给form添加一个contextMenuStrip1,将其邦定到button上,假设为button1。
给contextMenuStrip1添加一个item,然后为它设置快捷键(就是你想加在button上的快捷键),并且将它的Visible属性设为false。
mfc中好用的自定义控件使用方式

MFC中自定义控件的使用方式如下:1. 创建一个新的类,继承自CWnd或CButton等需要扩展的控件类。
2. 重载控件类的消息处理函数,如OnPaint、OnLButtonDown等。
3. 在需要使用自定义控件的地方,实例化该控件类并调用其Create成员函数进行创建。
4. 将创建好的控件添加到窗口或其他容器中。
以下是一个简单的自定义控件示例:```cpp// MyCustomControl.h#pragma onceclass CMyCustomControl : public CButton{public:CMyCustomControl();virtual ~CMyCustomControl();protected:afx_msg void OnPaint();DECLARE_MESSAGE_MAP()};``````cpp// MyCustomControl.cpp#include "MyCustomControl.h"CMyCustomControl::CMyCustomControl(){}CMyCustomControl::~CMyCustomControl(){}BEGIN_MESSAGE_MAP(CMyCustomControl, CButton)ON_WM_PAINT()END_MESSAGE_MAP()void CMyCustomControl::OnPaint(){CPaintDC dc(this); // device context for paintingCRect rect;GetClientRect(&rect); // get client area rectangleCDC memDC; // create memory device contextmemDC.CreateCompatibleDC(&dc); // create compatible DC with paint DCCBitmap bitmap; // create bitmap objectbitmap.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height()); // create bitmap with client area sizeCBitmap* pOldBitmap = memDC.SelectObject(&bitmap); // select bitmap into memory DC for drawing// draw your custom content here using memDC and bitmap objects// ...memDC.SelectObject(pOldBitmap); // restore old bitmap object from memory DCbitmap.DeleteObject(); // delete bitmap object when done with itmemDC.DeleteDC(); // delete memory DC when done with it}```在需要使用自定义控件的地方:```cpp// MainFrm.cpp or other relevant file#include "MyCustomControl.h"// ...CMyCustomControl* pCtrl = new CMyCustomControl(); // create custom control instancepCtrl->Create(WS_CHILD | WS_VISIBLE, CRect(10, 10, 100, 50), this, IDC_MYCUSTOMCTRL); // create custom control and add to parent window or container (e.g., CFrameWnd) as child control with ID IDC_MYCUSTOMCTRL```。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.
3
2.在生成的类中添加变量
#pragma once
// CCustomButton class CCustomButton : public CButton { DECLARE_DYNAMIC(CCustomButton) public: CCustomButton(); virtual ~CCustomButton(); BOOL m_IsPressed; protected: DECLARE_MESSAGE_MAP() public: virtual void DrawItem(LPDRAWITEMSTRUCT /*lpDrawItemStruct*/); afx_msg void OnLButtonUp(UINT nFlags, CPoint point); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg BOOL OnEraseBkgnd(CDC* pDC); };
void CCustomButton::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 m_IsPressed = TRUE; CButton::OnLButtonDown(nFlags, point); }
3.。重写方法 WM_BUTTONDOWN WM_LBUTTONUP
// CustomButton.cpp : 实现文件 // #include "stdafx.h" #include "just test.h" #include "CustomButton.h"
// CCustomButton IMPLEMENT_DYNAMIC(CCustomButton, CButton) CCustomButton::CCustomButton() { } CCustomButton::~CCustomButton() {
BOOL CCustomButton::OnEraseBkgnd(CDC* pDC) { // TODO: 在此添加消息处理程序代码和/或调用默认值 return TRUE; //return CButton::OnEraseBkgnd(pDC); } 4、最后改写 WM_ERASEBKGND 禁止窗口重画
CString str; GetWindowText(str); dc.DrawText(str,CRect(0,0,rect.Width(),rect.Height()),DT_CENTER|DT_VCENTER|DT_SINGLEL INE); // TODO: 添加您的代码以绘制指定项 }
void CCustomButton::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 m_IsPressed = FALSE; CButton::OnLButtonUp(nFlags, point); }
}
BEGIN_MESSAGE_MAP(CCustomButton, CButton) ON_WM_LBUTTONUP() ON_WM_LBUTTONDOWN() ON_WM_ERASEBKGND() END_MESSAGE_MAP()
// CCustomButton 消息处理程序
void CCustomButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { CRect rect; GetClientRect(rect); CDC dc; dc.Attach(lpDrawItemStruct->hDC); dc.SetBkMode(TRANSPARENT); CBrush m_Brush; m_Brush.CreateStockObject(NULL_BRUSH); dc.SelectObject(&m_Brush); if(m_IsPressed) { CPen pen(PS_SOLID,2,RGB(255,2,0)); dc.SelectObject(&pen); HRGN rgn = CreateEllipticRgn(0,0,rect.Width(),rect.Height()); SetWindowRgn(rgn,TRUE); dc.Ellipse(0,0,rect.Width(),rect.Height()); dc.SetTextColor(RGB(0,0,255)); } else { CPen pen(PS_SOLID,2,RGB(5,255,0)); dc.SelectObject(&pen); HRGN rgn = CreateEllipticRgn(0,0,rect.Width(),rect.Height()); SetWindowRgn(rgn,TRUE); dc.Ellipse(0,0,rect.Width(),rect.Height()); dc.SetTextColor(RGB(120,0,190)); }
然后关联控件变量
到此为止,我们已经我们完成了自定义按钮控江