VS2010添加自定义控件

VS2010添加自定义控件

一:自定义一个空白控件

1 :先创建一个MFC工程

 NEW Project-->MFC-->MFC Application-->name:  CustomCtr-->Type选择“Dialog based”;



2: 在窗口中添加一个自定义控件

Toolbox-->“Custom Control”-->属性-->class随便填写一个控件类名“CMyWin”, 这个名字用于以后注册控件用的,注册函数 RegisterWindowClass();




3:创建一个类

  在窗口中,右击custom control 控件-->ClassWizard-->ClassWizard-->Add Class-->类名CMyTest以C开头-->Base class:CWnd;



4:注册自定义控件MyWin

在MyTest类.h文件中声明注册函数BOOL    RegisterWindowClass(HINSTANCE hInstance = NULL);

BOOL CMyTest::RegisterWindowClass(HINSTANCE hInstance)

{

       LPCWSTR className = L"CMyWin";//"CMyWin"控件类的名字

       WNDCLASS windowclass;     

 

       if(hInstance)

              hInstance = AfxGetInstanceHandle();

      

       if (!(::GetClassInfo(hInstance, className, &windowclass)))

                 

              windowclass.style = CS_DBLCLKS;

              windowclass.lpfnWndProc = ::DefWindowProc;

              windowclass.cbClsExtra = windowclass.cbWndExtra = 0;

              windowclass.hInstance = hInstance;

              windowclass.hIcon = NULL;

              windowclass.hCursor = AfxGetApp()->LoadStandardCursor(IDC_ARROW);

              windowclass.hbrBackground = ::GetSysColorBrush(COLOR_WINDOW);

              windowclass.lpszMenuName = NULL;

              windowclass.lpszClassName = className;

 

              if (!AfxRegisterClass(&windowclass))

              {

                     AfxThrowResourceException();

                     return FALSE;

              }

       }

 

       return TRUE;

}

 

5:在MyTest类的构造器中调用,RegisterWindowClass();

CMyTest::CMyTest()

{

       RegisterWindowClass();

}

 

6:控件与对话框数据交换

在CustomCtrDlg.h中定义一个变量

CMyTest    m_draw;

 在对话框类的CustomCtrDlg.cpp的DoDataExchange函数中添加        DDX_Control(pDX,IDC_CUSTOM1,m_draw);

void CCustomCtrDlg::DoDataExchange(CDataExchange* pDX)

{

       CDialogEx::DoDataExchange(pDX);

       DDX_Control(pDX,IDC_CUSTOM1,m_draw);

}

 

以上是自定义一个空白控件。

 

二: 在控件上绘图

7: 在CMyTest类中添加一个绘图消息

在VS2010最左侧Class View中右击CMyTest类-->ClassWizard-->Messages-->WM_PAINT-->双击

开发环境自动添加OnPaint()函数及消息队列。


8:编写OnPaint()函数

例如:画一条直线

void CMykk::OnPaint()

{

       CPaintDC dc(this); // device context for painting

       // TODO: Add your message handler code here

       // Do not call CWnd::OnPaint() for painting messages

       CRect rect;

       this->GetClientRect(rect);

    

       dc.MoveTo(0,0);

       dc.LineTo(rect.right,rect.bottom);

}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
在WinForm中动态添加自定义控件的方式有多种,下面是一种常见的方法: 1. 在代码中创建一个循环,根据需要的控件数量进行迭代。例如,可以使用for循环来决定控件的数量。 2. 在循环内部,创建自定义控件的实例。可以使用自定义控件的构造函数来创建控件实例,并设置控件的属性,如名称、大小和位置。 3. 将自定义控件添加到相应的容器控件中。可以使用容器控件Controls属性来访问和添加控件。使用Add方法将自定义控件添加到容器控件Controls集合中。 4. 可以为自定义控件设置相应的事件处理程序。例如,可以为自定义控件的点击事件设置一个事件处理程序,以便在点击控件时执行特定的操作。 5. 最后,将容器控件添加到主窗体中,以便在应用程序中显示这些自定义控件。 下面是一个示例代码,演示了如何动态添加自定义控件(以麦田怪圈为例): ``` for (int i = 0; i < 5; i++) { Control.Refueller r1 = new Control.Refueller(); r1.sidePanel1.Click += new EventHandler(r1click); r1.Name = "jy" + i; r1.Size = new Size(220, 281); r1.Location = new Point(220 * i, 0); r1.Show(); panel1.Controls.Add(r1); } private void r1click(object sender, EventArgs e) { MessageBox.Show(this.Name); } ``` 在上述示例中,使用了一个for循环来创建了5个麦田怪圈的自定义控件,并将它们添加到名为panel1的容器控件中。同时,为每个控件的点击事件设置了一个事件处理程序r1click,以便在点击控件时弹出一个消息框。 请注意,以上示例代码仅为演示目的,并假设已经创建了自定义控件Refueller和相应的事件处理程序r1click。你可以根据自己的需求来调整代码,并在其中添加其他所需的控件和事件处理程序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C# winform 动态添加自定义控件](https://blog.csdn.net/qq_36074218/article/details/103765069)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [winform如何添加自定义控件,如何给自定义控件添加事件](https://blog.csdn.net/xiexiaodai/article/details/125040976)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值