如何自己写Win32控件
来源:互联网 发布:网络语言kfc是什么意思 编辑:程序博客网 时间:2024/04/27 19:47
最早时候就曾经哪里看到过说所有控件都是窗口(window),更有甚者说都是对象,这个就不扯了。自己做好的控件是做成Lib还是Dll那是后话,MFC我是不熟悉了,Win32还是看了几天的。大致把制作的整个流程简要的记录一下。
自己做的控件最主要的功能就是接受你发给他的命令,也就是要给外部调用的接口。控件有自己的消息处理函数比如
{
PETextView *View = (PETextView*)GetWindowLong(hWnd,0);
switch(Message)
{
case WM_NCCREATE:
if((View = new PETextView(hWnd)) == 0)
return false;
SetWindowLong(hWnd,0,(LONG)View);
return true;
case WM_NCDESTROY:
if(View)delete View;
return 0;
case WM_PAINT:
return View->OnPaint();
case WM_SIZE:
return View->OnSize(wParam, LOWORD(lParam), HIWORD(lParam));
case PEM_OPENFILE:
return View->OpenFile((TCHAR*)lParam);
case PEM_CLEAR:
return View->ClearFile();
default:
break;
}
return DefWindowProc(hWnd,Message,wParam,lParam);
}
这里有两类消息,一类是系统定义的以WM开头,一类是自己定义的,当然随便你自己定义啦。对应的消息看到是调用相应的函数完成的,这也就是说控件的行为就可以另外编写逻辑部分,然后提供接口给这里调用即可。
之所以说控件就是窗口是因为他有自己的窗口类,以及初始化函数,同时也有创建的函数。窗口类的定义和注册也做成提供给外部的接口,在外部必要的时候调用。而控制控件是通过发送消息来实现的,为了更加好看,可以定义一个宏,比如
那么创建窗口和控件唯一不同的地方就是,内部的创建和销毁消息是WM_NCCREATE和WM_NCDESTROY,先不管这两个消息。我们看到WM_NCCREATE之前有个GetWindowLong,其内有个SetWindowLong。这两个是关键的,这样就设置了这个控件的属性,使其关联起来,第二个参数msdn上是没有说明设置为0是什么意思的,其实这两个函数的第二个参数设置0表示读取的意思,第一个是读取该控件的属性,然后第二个函数在增加第三个参数的属性的同时读取赋予给这个控件。
一切都OK了!那么控件创建可在外部的WM_CREATE之时调用,当然也可以在使用其功能前调用即可。
一切提供给外部的调用都Port在一个头文件中,这样使用的时候包含这个头文件就好了。
接下来解释那两个消息,这两个消息是因为我们创建了子窗口,也就是我们自己的控件。
这两个消息与WM_CREATE,WM_DESTROY之间的顺序关系是这样的,只看销毁吧。
hwnd = parent, uMsg = WM_DESTROY
hwnd = child, uMsg = WM_DESTROY
hwnd = child, uMsg = WM_NCDESTROY
hwnd = parent, uMsg = WM_NCDESTROY
WM_DESTROY是通知子窗口销毁,然后子窗口通过接受WM_NCDESTROY进行销毁,并发送给父窗口,进行销毁。
细节部分介绍的差不多,总体思路就是和创建窗口差不多,但是要搞个头文件,把一些个常量和功能的函数另外一个窗口类的初始化和创建的接口搞进去。
- 如何自己写Win32控件
- win32编程 自己写窗口
- 如何为自己写的控件自动添加单元引用
- ASP.NET 里自己如何写组合控件的里单个控件的事件?
- 写自己的分页控件
- 自己写一个DropDownList控件
- 如何写自己的壳
- 如何写自己的壳
- 如何自己写一个日历
- 如何写自己的壳
- 如何定义自己的控件
- 不用login控件,自己写登录页面
- 自己写的实现分页的控件
- 自己写的GRID控件源码(源文件)
- 使用导航控件(自己写的)
- 自己写的textbox控件源码
- 我自己写的第一个控件
- 自己用js写的日期控件
- latch: cache buffers chains
- VC限制只能输入常规数字的CEdit控件
- 结构风险最小和VC维理论的解释
- java socket与 flex 通信
- JAVA基础
- 如何自己写Win32控件
- 第一篇
- The Java serialization algorithm revealed
- Python 去除List的回车'/n'
- 关于设置的HTTP_PROXY需要认证的问题
- NableCMS 1.0 beta2 放出!
- S2SH项目OpenSessionInView模式下的事务写操作异常
- Android事件处理分析
- win7+64安装PLSQL Developer