CLR自定义.NET控件制作(3)——自定义视图控件
2011-07-26 21:22
211 查看
当我们想要制作一个自己的视图控件时,就在在原控件视图上贴上我们自己的View, view可以随意开发,比如你开发一个View继承自CView,可以显示图片,影像,地图等。下面就以开发一个视图控件为例。
首先,你先要在CLR工程中,添加一个纯C++ View类,例如我添加名字为MyView的类,头文件:
CPP文件实现暂且不写。
然后,在CLR工程中的MyViewControl.h文件中的类私有成员中,添加一个成员变量
CMyView* m_MyView;
打开MyViewControl.h的设计器,查看属性,找到事件Load,双击,在MyViewControl.h代码文件中添加如下代码;
运行生成,则视图创建成功。
再在设计器中响应sizeChanged事件,使得控件在Form窗体上,可以随意改变大小和拖动。
运行生成,则简单的视图控件创建成功。
首先,你先要在CLR工程中,添加一个纯C++ View类,例如我添加名字为MyView的类,头文件:
#pragma once private class CMyView : public CView { public: CMyView (); virtual ~ CMyView (); DECLARE_DYNCREATE(CMyView) public: afx_msg void OnLButtonUp(UINT nFlags, CPoint point); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnRButtonUp(UINT nFlags, CPoint point); afx_msg void OnRButtonDown(UINT nFlags, CPoint point); afx_msg void OnMouseMove(UINT nFlags, CPoint point); afx_msg void OnContextMenu(CWnd* pWnd, CPoint point); afx_msg void OnMButtonDown(UINT nFlags,CPoint point); public: BOOL m_DesignMode; HWND m_ParentHwnd; ToolCallbackNative * m_pCallBack; protected: DECLARE_MESSAGE_MAP() };
CPP文件实现暂且不写。
然后,在CLR工程中的MyViewControl.h文件中的类私有成员中,添加一个成员变量
CMyView* m_MyView;
打开MyViewControl.h的设计器,查看属性,找到事件Load,双击,在MyViewControl.h代码文件中添加如下代码;
System::Void MyViewControl:: MyViewControl _Load(System::Object^ sender, System::EventArgs^ e) { IntPtr ptr = this->Handle; //得到当前句柄 Void * pWnd = ptr.ToPointer(); RECT rc; ::GetWindowRect((HWND)(int)this->Handle, &rc); //得到窗体的大小 rc.right -= rc.left; rc.bottom -= rc.top; rc.top = rc.left = 0; if (!m_MyView->Create(0, 0, WS_VISIBLE|WS_CHILD, rc, CWnd::FromHandle((HWND)(int)this->Handle), 100)) { LONG e = GetLastError(); delete m_MyView; m_MyView = 0; } //得到父窗口句柄 m_MyView->m_ParentHwnd = (HWND)(int)this->Handle; }
运行生成,则视图创建成功。
再在设计器中响应sizeChanged事件,使得控件在Form窗体上,可以随意改变大小和拖动。
System::Void MyViewControl:: MyViewControl _SizeChanged(System::Object^ sender, System::EventArgs^ e) { RECT rc; ::GetWindowRect((HWND)(int)this->Handle, &rc); rc.right -= rc.left; rc.bottom -= rc.top; rc.top = rc.left = 0; if(m_MyView) { int cx, cy; cx = rc.right - rc.left; cy = rc.bottom - rc.top; ::SetWindowPos(m_MyView ->m_hWnd, NULL, 0, 0, cx, cy, SWP_NOZORDER | SWP_NOACTIVATE); } }
运行生成,则简单的视图控件创建成功。
相关文章推荐
- 自定义控件(视图)28期笔记06:自定义控件之 自定义属性
- Android 自定义视图容器控件拦截ontouch事件传递给其子控件
- 【视图控件篇】自定义Android控件之IOS滑动开关模拟详解
- Android绘图API开发自定义控件视图
- Android--自定义视图控件(一)(Android Studio)
- 自定义视图(组合控件)
- 控件视图Android 自定义视图容器控件拦截ontouch事件传递给其子控件
- 自定义视图窗口控件
- setMeasuredDimension(widthMeasureSpec, heightMeasureSpec)方法导致在视图中自定义ViewGroup一下的控件显示不出来
- iOS中自定义视图控件
- Swift 自定义视图:简单的数量选择控件
- Android自定义控件之联动视图
- 自定义控件(视图)28期笔记08:自定义控件之 9patch图说明
- Android中的自定义视图控件
- Android自定义控件之联动视图 .
- 【自定义视图控件】入门篇----继承View以及主要的函数
- android 自定义视图控件开发
- 自定义服务器控件开发(3)--视图状态与控件状态
- 自定义view简单的视图控件,控制view的背景颜色
- 自定义视图控件例:自定义正方形