苏州大学论坛

 找回密码
 注册(开放注册)
搜索
查看: 12672|回复: 4

[软件] win32学习初级三

[复制链接]
发表于 2006-12-2 14:30:21 | 显示全部楼层 |阅读模式
靠,最近天天加班,忙得头疼,连续3天没睡好觉。一天就睡4个小时,惨!!!
   今天给大家写点东西。
   呵呵同事光驱坏了,底下这段代码挺长,我慢慢敲,有错的地方大家可以提出来。呵呵
#cinlude <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPre,PSTR szCmdLine,int iCmdshow)
{
   static TCHAR szAppName[] = TEXT("窗口");
  //大家想想 上面可不可以这么些 static TCHAR* psAppName = TEXT("窗口");
  HWND hwnd;//定义窗口句炳
  MSG msg;//定义消息结构体变量
  WINDCLASS wndclass;//定义窗体类变量基于窗体的所有信息基本上封装在这个类里
  wndclass.style = CS_HREDRAW | CS_VREDRAW;/窗体的模式定义,左右改变窗体
                                             //大小时,重新绘制客户区
  wndclass.lpfnWndProc = WndProc;//这里是把函数地址付给类的成员变量,我向大家没忘记
                               //函数名和类名数组名一样是一个指针吧,
                               //还有就是不是程序运行到这个点时,启动事件驱动函数
  wndclass.cbClsExtra = 0; //这个成员变量基本上等于被废弃,一般很少用它,也可以将其赋
                        //值为NULL
    wndclass.cbWndExtra = 0;//同上,在以后我会给大家举例子说明如何使用上面的成员变量
                         //暂且把他们认为是保留字
  wndclass.hInstance = hInstance; // 程序运行时唯一标志符
  wndclass.hInon = LoadIcon(NULL,IDI_APPLICATION);//这里是控制窗体左上角显示的小图
                //表。这里使用的是默认图表,如果想用自己做的,可以把第二个参数改变
                //同时第一个参数相应的改变为hInstance
    wndclass.hCursor = LoadCursor(NULL,IDI_ARROW)//这里是设置光标图案,其他同上。
  // 窗体客户区背景色的设置 ---- 白色
  wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
   wndclass.lpszMenuName = NULL; //菜单设置-------无
  wndclass.lpszClassName = szAppName; //类名的设置

  //下面就是注册窗口类,说白了 就是想系统申请资源
  if(!RegisterClass(&wndclass))
   {
         MessageBox(NULL,"123","123456",NULL);
   }
   // 接下来就得创建窗体
  hwnd = CreateWindow(
                            类名,
                窗口标题,
                窗口样式,
                横向坐标起始点,//就是窗口左上角在屏幕中的位置
                纵向坐标起始点,//就是窗口左上角在屏幕中的位置
                横向坐标末端点,//就是窗口右下角在屏幕中的位置
                纵向坐标末端点//就是窗口右下角在屏幕中的位置
                                   );
          // 显示窗口
          ShowWindow(hwnd,iCmdShow);
          // 更新窗口
      UpdateWindow(hwnd);
          //消息循环(略)
      //程序返回
}
呵呵 省略不少东西,不过大致的意思大家应该能看懂,个人感觉注释够详细了。
上面的代码中,我们要的关键东西就是 hInstance,和 hwnd ,只要我们拥有这两个变量,我们就可以在其他的程序里对上面的资源为所欲为
程序的主体时消息循环,别的只是资源的初始化
消息循环其实是个“死”循环。除非我们单击关闭按钮,向系统发送关系信息,这是GetMesage函数的返回值是假,这样程序就结束。那么程序如何来处理消息
消息循环如下
if(GetMessage(&msg,NULL,0,0))
{
     TranslateMessage(&msg);//这里我们分析与解析消息
     DispatchMessage(&msg); //这里我们发送消息
   // 我们通过lpfnWndProc 来调用WndProc函数,因为在上面我们把函数WndProc的地址赋
   //值给lpfnWndProc ,所以这里就可以直接用lpfnWndProc来替代函数名WndProc,注意这
   //里没有宏的概念,只是简单的指针操作。
}
下面是消息处理函数。更多人看到的是用switch,其实多一样,个人感觉这样更便于理解,有人说,你这样做不对,很有可能两个消息的值是一样的,如果这有这种情况,用switch也是错的,因为将会有个消息无法得到启动
LRESULT CALLBACK WndProc(HWND,UINT msg,WPARAM,LPARAM)
{
      //略
    if(msg == WM_CREATE)
       {
             //
             调用CreateWindow函数成功时,启动这个消息
             return ;
       }
       if(msg == WM_PAINT)
       {
            //当窗体的一部分无效时,我们会自己去触发这个消息,重新绘制窗口,否则无效区域
       //将是一片空白
            return ;
        }
       if(msg == WM_DESTROY)
       {
             //程序结束时我们触发这个消息
             return;
       }
}
我靠 终于讲完这篇,不知道兄弟们有没有理解,呵呵,下次咱做个能跑起来并且能做点东西的东东
发表于 2006-12-3 21:07:33 | 显示全部楼层
如果想让别人跟着你的教程来学习,就得更多的考虑初学者的状态和学习过程!

另外:2怎么没看到?
 楼主| 发表于 2006-12-4 19:32:17 | 显示全部楼层
呵呵 师兄 2 早就写过了 至于教程嘛 ,我没有,
      不过我写的不是很深吧,初学者应该能看懂 ,还有啊 上面的我感觉写的已经是超级简单了,我当初学习win32的时候,可没有这么详细解释的代码.
       win32的入门篇应该是这样,至于其他的一些基础铺垫我感觉可以自己去看书,我没必要写出来.多是死的东西.自己稍微看看就够了
    至于教程我准备先自己写着,然后在做遗漏补充.等过几天我给大家推荐一本书,自己参考着看
    师兄说考虑初学者的状态,这个我不太好把握.我想初学者迷惑的地方应该是程序的运行流程,这个我下次写的时候给补上,其他的没什么难的地方
发表于 2006-12-9 20:28:56 | 显示全部楼层

hehe

我来过了
哥哥下次给讲一下钩子函数吧
 楼主| 发表于 2006-12-10 10:45:43 | 显示全部楼层
工作找到没有
这个等我元旦放假写,最近挺忙活
您需要登录后才可以回帖 登录 | 注册(开放注册)

本版积分规则

手机访问本页请
扫描左边二维码
         本网站声明
本网站所有内容为网友上传,若存在版权问题或是相关责任请联系站长!
站长联系QQ:7123767   myubbs.com
         站长微信:7123767
请扫描右边二维码
www.myubbs.com

小黑屋|手机版|Archiver|苏州大学论坛 ( 琼ICP备10001196号-2 )

GMT+8, 2024-3-29 00:06 , Processed in 0.159916 second(s), 23 queries .

Powered by 高考信息网 X3.3

© 2001-2013 大学排名

快速回复 返回顶部 返回列表