• 窗口设置windws 程序设计 第三章(上)


    PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦!

             娘的,今天晚上在阳台做饭把水管一脚踢爆了,水流到下面的住户的阳台,让个老娘们把我骂了一顿,本着做错事的原则,我装的很绅士还说了个对不起,擦,真是条纯男人,能屈能伸。    

            大爷,别看我年轮小,我都给总结了,第三章主要可以用两句话来开展“创立和显示窗口,接受和处置消息”,真他娘的是个人才,多么简练扼要,把这两句的内容搞懂了,就算入门了。

            第一句“创立和显示窗口”。

                 首先,“创立”,想创立什么样的窗口?你连丫的创立什么窗口都不知道,还创立个毛,所以你首先明确自己要创立窗口的样式,但你也不能乱创立,并非想干吗就可以干吗。windws中用WNDCLASS结构体来存储你要创立窗口的样式,这样,用WNDCLASS结构体就既能让你创立符合windows外观类型的窗口,又限制了你天马行空的啥都想创立。

                      所以第一步,你要定义一个WNDCLASS结构体变量,创立以后干啥? 丫的初始化呀,填充这个结构体变量中的值。

                      WNDCLASS有10个字段,你可能说真他娘的多,我认为你说的真有情理,我也认为多,但是那群娃儿就是那么计划的,木办法啊兄弟们,忍忍吧,我这里有一个记忆方法,“打开一个窗口,把鼠标放进去”,ok,当初从这个窗口的左上角到右下角来分析。

             开始左上角第一个之前,拿一个女人对比,你要确定你喜欢的类型(style),上她之前你要给人家名分(lpszClassName),玩了以后你要告诉人家你是谁(hInstance)

             左上角第一个是图标,没错!WNDCLASS其中一个变量就是设定图标值,LoadIcon(),这个函数用的最多的就是两种情况。

                      第一种:使用windows系统自身图标资源,LoadIcon(NULL,IDI_APPLICATION);就是这样,第一个参数是NULL,第二个是预定义好的ID,这个不用记着,直接百度就行。

                      第二种:使用.RC文件中的ICON图标,也就是在VS资源文件中自定义的图标,这个图标都有个ID,LoadIcon(hInstance, MAKEINTRESOURCE(图标ID)); 其中hInstance就是WinMain函数参数中的那个hInstance,MAKEINTRESOURCE()可以自己百度一下。

             紧接着图标下面是菜单,有人说他娘的那不是标题吗,操,我说的是从左上角到右下角,不是从左到右,这个菜单就是指定菜单的名字,lpszMenuName,当初的程序不使用菜单,所以设置为NULL。

             紧接着菜单下面是客户区,客户区就需要设置背景色,(HBRUSH)GetStockObject(WHITE_BRUSH);我估计微软那帮人装修屋子都喜欢自己刷墙,所以按他们的懂得设置背景色就跟用刷子刷墙一样一样地,所以设置背景色就用画刷BRUSH,使用的什么颜色的画刷就可以刷什么颜色的背景。GetStockObject该函数检索预定义的画刷、字体等的句柄。之所以前面加上(HBRUSH)强制转换,你想GetStockObject既获得画刷,又获得字体等的句柄,返回值肯定是一个通用值,为HGDIOBJ,这是一个图形图像的句柄。

             再往右下角看,是你刚才拉大或拉小窗口的鼠标,对,WNDCLASS有设置鼠标的字段,需要用LoadCursor,LoadCursor得用法跟LoadIcon一样一样滴,这里我们用LoadIcon(NULL,IDC_ARROW);

        每日一情理
    微笑,是春天里的一丝新绿,是秋日里的一缕阳光,是骄阳下的一片浓荫,是冬雪中的一株梅红……微笑着去面对吧,你会感到人生是那样的温馨与甜蜜!

                 好了差不多了,窗口句柄,名字,类型,图标,鼠标,背景,菜单设置了,还有三个字段,cbClsExtra,cbWndExtra和lpfnWndProc,其中“cbClsExtra,cbWndExtra“是为这个类结构和窗口结构预留的额定空间,一般都设置为0,lpfnWndProc是要设置回调函数,这个当初只需要记着设置回调函数就好了,要问为啥当初不解释,因为半夜12点了,锅锅我要睡觉了。

               到此,WNDCLASS各个字段都解释完了,可能有的新手认为很费事,尤其是各个字段的名字,希奇古怪,比如lpfnWndProc,lpfn是啥个前缀啊,下面我copy了一个常用前缀,看看就轻易记着了。                            

        

    前缀 含义
    c char,字符型
    by                byte,无符号字符
    i int,整形
    x, y 坐标
    cx, cy 长度
    h 句柄
    l long,常整形
    n short,短整形
    fn 函数
    w word,无符号短整形
    dw double word,无符号长整形
    p pointer,指针
    s string,字符串
    sz string with zero,以\0结束的字符串
    b或f b代表bool, f表示flag

                  按下面的懂得,lpfnWndProc,就是标识指向函数(fn)的长指针(lp),又有人可能问,妈的,什么是长指针?我们知道windows编程比较底层,涉及到很多很原始的代码,可能你还在娘胎一堆水的时候这些代码就有了,遥记当年电脑还是16位的时候,寻址范围为2^16地址范围以内的指针叫做短指针,寻址范围超过前述范围的叫做长指针,至于再往下搞什么是寻址范围,你可以看看王爽的《汇编语言》,想买这本二手实体书的找我!三成新,随意给点钱就行。后来你出身以后,电脑就酿成32位了,并且使用“flat“内存模型,2^32地址范围(也就是4GB范围内的内存地址)内做寻址都不用修改段寄存器,就没有人再说长、短指针了,所以当初的C语言,c++很少提这个,齐备都是叫指针。

                         根据以上内容我们到当初为止划拉的代码如下:

    #include <windows.h>  
    
    int WINAPI WinMain(HINSTANCE hInstance,   
    		 HINSTANCE hPrevInstance, 
    		 PSTR szCmdLine,
    		 int iCmdLine)
    {
    	         
    	TCHAR* className = "firstWindow";
    	WNDCLASS wndClass;
    
        	wndClass.hInstance = hInstance;
    	wndClass.style = CS_HREDRAW|CS_VREDRAW;
    	wndClass.lpszClassName = className;
    	wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    	wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    	wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    	wndClass.cbClsExtra = 0;  
    	wndClass.cbWndExtra = 0; 
    	wndClass.lpszMenuName = NULL;
    	wndClass.lpfnWndProc = callBackWndProc //暂时假设回调函数名字为callBackWndProc
    
    
    }

        
     

    文章结束给大家分享下程序员的一些笑话语录: 《诺基亚投资手机浏览器UCWEB,资金不详或控股》杯具了,好不容易养大的闺女嫁外国。(心疼是你养的吗?中国创业型公司创业初期哪个从国有银行贷到过钱?)

  • 相关阅读:
    spark foreachPartition
    spark mapPartition
    spark union intersection subtract
    spark join 类算子
    spark action 算子
    卷展栏模板
    锁定/解锁
    3D一些提示信息
    文件对话框多选
    吸取属性
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3093544.html
Copyright © 2020-2023  润新知