日期:2014-05-17  浏览次数:20519 次

API中如何用CreateWindowEx创建一个窗体或控件 高手请进
API中如何用CreateWindowEx创建一个窗体或控件
请给个例子,说明CreateWindow、 CreateWindowEx这两个函数的使用方法,

------解决方案--------------------
asp.net需要创建窗口吗?
------解决方案--------------------
C#的winform也不需要使用api来创建窗口啊。
如果是win32程序的话:CreateWindow该函数创建一个重叠式窗口、弹出式窗口或子窗口。它指定窗口类,窗口标题,窗口风格,以及窗口的初始位置及大小(可选的)。该函数也指定该窗口的父窗口或所属窗口(如果存在的话),及窗口的菜单。若要使用除CreateWindow函数支持的风格外的扩展风格,则使用CreateWindowEx函数代替CreateWindow函数。
具体可参见Windows程序设计
------解决方案--------------------
既然你要,那就给你一个参考:
http://blog.csdn.net/dobzhansky/article/details/4464224

不过这么做完全没有实际意义。
------解决方案--------------------
探讨
有意义啊,我要在其它应用程序上创建窗体或都控件

------解决方案--------------------
估计你没有搞过sdk程序。

我可以简单给你普及下,因为你一点概念还没有。

创建控件只是第一步,关键是要处理控件的消息,在sdk程序的createwindow,需要先注册窗口类,窗口类是一个结构体,有一个字段叫lpfnWndProc,用来指定处理这个窗口的消息处理函数。

这个字段其实是这个消息处理函数的指针,在C#里面,你传一个委托就可以了。问题在于,这个只能对本进程有效,Windows对程序使用逻辑地址,每个程序看上去都是独占了整个内存空间,换一句话说,你没有办法把这个地址传递给另一个进程,即便你这么做了,它也找不过来,它去访问的是它的逻辑地址。

为了让那个进程也能访问到消息处理函数,唯一的办法是将消息处理函数的机器代码直接复制到那个进程里面,当然这么做估计只有黑客和对底层很熟悉的人能做,那么变通的办法就是写一个dll,因为dll被装在到目标进程中,所以就可以访问到。

但是如你所知,C#根本不具备创建原生dll的能力。

上面只是分析了一个最基本的难点。就算C#能做,也不等于说你现在的水平能做,就算你的水平能做,现在的杀毒软件也不允许你这么做,为了保证代码稳定和兼容还有很多事情要做,总之,这种方案对你来说停留在理论上,就不要浪费时间了。
------解决方案--------------------
c#没有这种函数,只有c++ 的SDK才有上面两个函数。

CreateWindow //函数
CreateWindowEx //基类虚函数

子类可以实现该函数,否则调用基类的。

这两个方法是构造MFC窗体比较核心两个方法。 LZ莫非你想考验大家的智商?