【专业技术】如何愉快的在Windows下开发控件

在Win32环境下,怎么来创建常用的那些基本控件呢?通过MSDN可以知道,不管是创建窗口还是控件,都是通过CreateWindow或者CreateWindowEx这个函数来完成的,这两个函数除了多一个扩展风格之外,其他完全一样,下面以CreateWindow为例说明,该函数原型如下:

HWND CreateWindow(LPCTSTR lpClassName,

LPCTSTR lpWindowName,

DWORD dwStyle,

int x, int y, int nWidth, int nHeight,

HWND hWndParent,

HMENU hMenu,

HANDLE hInstance,

PVOID lpParam );

参数如下:

lpClassName:窗口或控件的类名

lpWindowName:窗口或控件的名字或者文本

dwStyle:窗口或控件风格

x,y,nWidth,nHeight:窗口或控件的坐标和宽高

hWndParent:窗口或控件的父窗口

hMenu:窗口菜单或者控件的ID

hInstance:窗口实例,控件一般为空

lpParam:窗口或控件参数,会被传递到创建消息中去

那么具体怎么实现各个基本的控件呢?下面我们来一一创建。

  1. 创建标签/静态文本: CreateWindow("STATIC", TEXT("Test Text"), WS_CHILD|WS_VISIBLE|SS_LEFT, 10, 10, 250, 30, hwnd, (HMENU)IDC_STATIC1, NULL, NULL); 通过该调用,就创建了一个静态文本。
  2. 创建button: CreateWindow("BUTTON", TEXT("Open(&O)"), WS_CHILD|WS_VISIBLE, 170, 110, 90, 30, hwnd, (HMENU)IDC_BUTTON1, NULL, NULL);
  3. 创建编辑框: CreateWindow( "Edit", NULL, WS_CHILD|WS_VISIBLE|WS_BORDER, 10, 50, 250, 30, hwnd, (HMENU)IDC_EDIT1, NULL, NULL);
  4. 创建控件容器Frame CreateWindow("BUTTON", TEXT("颜色"), WS_CHILD|WS_VISIBLE|BS_GROUPBOX, 360, 90, 130, 140, hwnd, (HMENU)IDC_FRAME, NULL, NULL);
  5. 创建列表框: CreateWindow("LISTBOX", NULL, WS_CHILD|WS_VISIBLE|LBS_STANDARD, 170, 150, 180, 100, hwnd, (HMENU)IDC_LISTBOX, NULL, NULL);
  6. 创建组合框:

CreateWindow("COMBOBOX", NULL, WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_SIMPLE,

500, 10, 190, 150, hwnd, (HMENU)IDL_ComboBoxSpl, NULL, NULL);

这些控件创建出来的效果如下:

这些控件可是不用MFC中的方式创建,纯手工打造,怎么样?是不是很简单,赶快去试试吧。

事实上,windows的所有控件都是用这个函数创建的,只是不同的控件的类不一样,更多的控件可以查MSDN。

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-05-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏青玉伏案

iOS开发之画图板(贝塞尔曲线)

  贝塞尔曲线,听着挺牛气一词,不过下面我们在做画图板的时候就用到贝塞尔绘直线,没用到绘制曲线的功能。如果会点PS的小伙伴会对贝塞尔曲线有更直观的理解。这篇博文...

23810
来自专栏葬爱家族

Android高德之旅(3)UI Setting

前两篇讲到了地图的基础显示和地图类型,今天来记录下高德地图交互相关的设置。地图的触摸事件很丰富,有单击、双击、单指拖拽、双指拖拽、双指旋转、双指缩放等,高德提供...

1773
来自专栏三好码农的三亩自留地

Android-打造一个简单通用的Material加载LoadingView

因为网络请求的时间一般是未知的,所以我们一般都是用一个循环的圆圈指示器来提示用户,如下图。

2203
来自专栏Code_iOS

OpenGL ES 2.0 (iOS)[05-1]:进入 3D 世界,从正方体开始

a. 渲染管线的基础知识 《OpenGL ES 2.0 (iOS)[01]: 一步从一个小三角开始》

1463
来自专栏林德熙的博客

Xamarin Forms 进度条控件

本文翻译:http://xamlnative.com/2016/04/14/xamarin-forms-a-simple-circular-progress-c...

1351
来自专栏郭霖

Android高级图片滚动控件,编写3D版的图片轮播器

大家好,好久不见了,最近由于工作特别繁忙,已经有一个多月的时间没写博客了,我也是深感惭愧。那么今天的这篇既然是阔别了一个多月的文章,当然要带来更加给力点的内容了...

7648
来自专栏Windows Community

Windows Community Toolkit 3.0 - UniformGrid

UniformGrid 控件是一个响应式的布局控件,允许把 items 排列在一组均匀分布的行或列中,以填充整体的可用显示空间,形成均匀的多个网格。默认情况下,...

1152
来自专栏jianhuicode

带着问题写React Native原生控件--Android视频直播控件

最近在做的采用React Native项目有一个需求,视频直播与直播流播放同一个布局中,带着问题去思考如何实现,能更容易找到问题关键点,下面分析这个控件解决方法...

1.5K8
来自专栏转载gongluck的CSDN博客

CListCtrl控件使用方法总结

今天第一次用CListCtrl控件,遇到不少问题,查了许多资料,现将用到的一些东西总结如下: 以下未经说明,listctrl默认view 风格为report ...

39613
来自专栏程序员的诗和远方

Canvas画图-鼠标涂鸦

之前写了一篇Canvas画图-一个比想象中更骚气的圆(渐变圆环),后面又写了使用SVG实现的方法 一个比想象中更骚气的圆-svg实现, 这篇继续学习和Canv...

3686

扫码关注云+社区