‘壹’ win32编程 为什么要注册窗口类注册窗口类究竟做了哪些工作
你想创建什么样的窗口呢?那么,创建什么样的窗口呢?创建前,Window系统可不知道你要的是什么类型的窗口啊(比如标题栏上显示什么图标,鼠标形状是什么,窗口背景颜色等等)。这些类型信息应在你创建前事先告诉Window系统。可以采用这种方法:就是我们事先写一份要创建窗口的类型申请表,提交(注册)给Window系统。然后在创建时,可以让Windows按这个申请表来创建你所要的窗口了。也就是说我们还应该先提交一个申请表,申请成功后再根据这个表创建一个窗口。
我们在使用microsoft平台SDK或者MFC编程时,在创建窗口类后都要先用RegisterClass函数来注册窗口类,这个函数需要一个指向窗口类结构的指针。那么RegisterClass这个windows API函数到底做了什么呢,关于这个函数的源码微软是不会给出来的,因为它只是提供一个系统编程接口,网上也找不到相关说明,只是粗略介绍需要将类注册给系统,但从msdn的atom table说明中我们发现这样一段说明。
The system uses atom tables that are not directly accessible to applications. However, the application uses these atoms when calling a variety of functions. For example, registered clipboard formats are stored in an internal atom table used by the system. An application adds atoms to this atom table using。
答案有了,在我们构造一个窗口类结构后,我们需要将这个类结构指针加入到system atom table 即SAT中,这样系统就可以通过查找这张表来找到用户自定义的窗口类,window预定义的窗口类指针也在SAT中。SAT实际上实现了一种用于查询的映射,atom实际类型是short,即16位数据。只有系统才可直接访问这张表,但在调用某些api函数时,如Registerclass,可以告知系统来存取这张表。当然,还有本地原子表和全局原子表,这些表应用程序是可以直接访问的。
‘贰’ 新手用Win32编写一个窗口应用程序
1、LBUTTONDOWN,不是LBUTTONDOWH
2、GetDC,不是GetDc
3、你下面那个声明的HDC hdc应该是HDC hDC吧?
‘叁’ WIN32 API 编程:创建子窗口(编辑控件 EDIT)后通过菜单选项改变子窗口控件 样式
Windows 记事本就是类似你这样的窗口,有一个自动换行的选项。事实上你用 SetWindowLong 改变样式确实是无效的,我也试过。应该是需要重新创建该控件的。
‘肆’ 什么是win32编程
Win32编程,指的是用Window提供的API(Application Programming Interface)为Window编写应用程序。
之所以称之为Win32,是因为现在的Window都是32位的(现在已经有64位的吧!但是最普遍是32位).
大家都知道,Window是由GDI.DLL、USER.DLL、KERNEL.DLL三大主要部分组成的。(其实你现在不知道也
不是说的很重要。只是在你学习编程的过程中,你肯定会经常碰到这几个字眼。你肯定会熟悉它的。),那么
学习Win32编程的大部分(特别是应用程序界面部分的编程)是用这三个DLL(Dynatic Linked Library)动态链接库
子程序形式提供的API函数。
就我认为:学习Win32编程得有几个重要条件:一是C语言功底。二是外语功底。三是使用Window的经验。
要学习它不是很难,但也决非易事:
首先:你必须有编程的经验。这里的经验不是指传统的DOS下的字符模式下的编程。大家都知道,Window是图形
操作系统、同时也多任务抢占式(理解它很重要),它是在图形模式下工作。当然你编程得服从于它。但是正
是因为这个,Window的编程模式就和DOS不一样。所有你得有DOS下编程的经验,但是还得转变为WINDOW下的编程
方式。因为两个系统的编程一个是过程化的。即程序从上到下,顺序执行。而另一个是,事件驱动的。要明白
这个,才会体验到Window的博大精深。
我觉得有必要对Window操作系统有所了解。什么是多任务,什么是抢占式。进程和线程的概念。但是刚
开始没有必要因为这些概念让我们失去信心。因为只要你入门了,你就会非常兴奋。
事件驱动:我们知道DOS下程序是顺序执行的。至少它是按着你指定的路径或条件执行的。尽管可能会
在某些条件下跳转,但是基本上是在你(程序的掌握之中),但是在事件驱动中,你只需考虑到可能出现的情
况,并对这些情况做相应的处理。当Window执行你的程序时,它会检测是否发生了你考虑的那些事情是否发生
,如果发生了某件事情(比如你用鼠标单击),它会给你的程序发送相应的消息(所以叫做消息驱动,这里
对就鼠标的消息是WM_MOUSELDOWN等).
‘伍’ win32程序和控制台程序编程有什么区别
win32应用程序是指可以在32位或以上Windows系统中运行的程序,概念比windows窗体大,严格说来,窗体程序也是win32应用程序。你问的是vs环境中不同的程序类型的区别吧。win32程序是利用编程语言直接调用windows api编写的程序,可以在任何装有正确windows的机器上运行,程序员发挥的空间也最大,能实现在该操作系统中可以编程实现的任何功能。 x0dx0a而.net的窗体应用程序是一种托管代码,无论你是用c++\c#还是vb编写,只能在.net环境中应用,就是说你编译好的软件在没有.net framework的机器上是不能运行的,而且功能的实现也要受framework的限制,不能随心所欲。x0dx0a可视化的除了窗体程序,你也可以选择mfc,代码编写量比纯api编程要小的多,尽管比.net复杂,但应用起来更灵活,而且这个是不依赖.net框架的。x0dx0awin32包括mfc可以调用操作系统允许的任何程序(甚至可以通过某种技术调用操作系统不允许的操作如hook api技术),当然可以调用窗体程序。
‘陆’ 如何用win32控制台设计窗口
你的意思是想在GUI的图形程序中调用 命令行控制台是吧。可以用多线程编程 createthread 或者 创建新进程 createprocess 函数创建一个控制台程序。亦或者创建一个console项目,用createprocess 创建一个WIN32进城,然后让两个进程 或进程的两个线程之间通讯。 参考书 当然是JEFFREY RICHTER的 windows核心编程啊 ,大神之作从事WINDOWS开发的必备书籍。
‘柒’ Win32是什么什么叫Win32编程
WIN32就是基于32位的windows平台
WIN32编程就是针对32位windows平台的编程开发
现在有了64位的windows系统,但是貌似还没见WIN64
‘捌’ win32编程,一个程序怎么实现多个窗口(是多次利用greatewindow吗
当然是多次调用创建窗口的函数(不一定非得是CreateWindow函数)。一个程序只能有一个消息循环,由它处理本程序接收到的所有消息。
‘玖’ 如何创建windows窗口编程
这个三言两语讲不清,大概把我的学习过程分享一下:
首先,建立兴趣(笑)。
接着,在网上找相关的教程,基本上可以直接搜索“WIN32”这个词,加上自己的编程语言种类,肯定有很多相关的,选上一个自己喜欢的。
接着,背诵各种各样恶心的API函数(CPP据说有SDL库,同样恶心)。等到把常用的API都能记下(实际上只要知道大概就行了,API函数总共几十万。。。),就可以开始进行窗口编程了。
‘拾’ Win32编程原理
所谓的Win32开发,就是在C语言的层面上,直接使用Win32API开发Windows应用程序或者系统程序。虽说现在直接用Win32API开发应用程序的人已经不多了,但是深入理解Windows系统程序设计原理,仍然是成为Windows开发高手的良好途径。所谓的Win32,其实是一个API规范,与UNIX系统编程接口标准POSIX是相对应的。下面是进行直接的WIN32SDK方式编程的基本思路或者说是一个框架:
一个Windows程序分为程序代码和UI(UserInterface用户接口)资源两大部份,两部份最后以RC编译程序整合为一个完整的EXE文件。所谓UI资源是指功能菜单、对话框、程序图标、光标形状等等东西。这些UI资源的实际内容(二进制代码)系借助各种工具产生,并以各种扩展名存在,如.ico.bmp.cur等等。程序员必须在一个所谓的资源描述档(.rc)中描述它们。RC编译器(RC.EXE)读取RC文件的描述后将所有UI资源文件集中制作出一个.RES文件,再与程序代码结合在一起,这才是一个完整的Windows可执行文件。
与控制台程序相同的是,一个Win32程序也必须有一个程序入口点,但是在这儿它不再叫main(),而叫做WinMain(),当WINDOWS的SHELL检测到用户欲执行一个EXE程序,就会调用加载器把程序进行加载,然后调用Cstartupcode,后者再调用WinMain(),程序的执行就开始了,WinMain()函数的原型为:
intCALLBACKWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow);
下面程序必须进行必要的初始化工作-产生窗口,第一步是注册一个窗口类:用API函数:RegisterClass(),而这个函数需要一个已经定义好的系统结构:WNDCLASS,这个结构里面定义了窗口的种种属性,需要自己定义,但是许多属性都有默认值。然后调用CreateWindow()函数来产生具有上述定义属性的已注册窗口,但是需要注意的是它只是生成窗口,但并不显示之,所以还需要调用一个函数ShowWindow()将它显示在屏幕上,做完这些初始化工作以后,系统将进入消息循环:
while(GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);}
当消息循环捕捉到消息以后将交由窗口函数WndProc()窗口函数进行相应的处理。这样,一个基于消息事件驱动的WIN32程序的雏形就建立了起来。