Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > .NET > C#.NET > 读 《Windows程序设计》(3)
【标  题】:读 《Windows程序设计》(3)
【关键字】:Windows
【来  源】:http://blog.csdn.net/jiazhen/archive/2006/12/15/1444509.aspx

读 《Windows程序设计》(3)

Your Ad Here

 

“进行Windows程序设计,实际上是在进行一种对象导向的程序设计(OOP)。这一点在Windows中使用得最多的对象上表现最为明显。” 

“作为对象,使用者会在屏幕上看到这些窗口,并通过键盘和鼠标直接与它们进行交互操作。更有趣的是,程序写作者的观点与使用者的观点极其类似。窗口以「消息」的形式接收窗口的输入,窗口也用消息与其它窗口通讯。对讯息的理解将是学习如何写作Windows程序所必须越过的障碍之一。”

“所谓「Windows给程序发送消息」,是指Windows呼叫程序中的一个函数,该函数的参数描述了这个特定消息。这种位于Windows程序中的函数称为「窗口消息处理程序」。”

“程序建立的每一个窗口都有相关的窗口消息处理程序。这个窗口消息处理程序是一个函数,既可以在程序中,也可以在动态链接库中。Windows通过呼叫窗口消息处理程序来给窗口发送消息。窗口消息处理程序根据此消息进行处理,然后将控制传回给Windows。”

“窗口消息处理程序处理给窗口发送消息。这些消息经常是告知窗口,使用者正使用键盘或者鼠标进行输入。这正是按键窗口知道它被「按下」的奥妙所在。在窗口大小改变,或者窗口表面需要重画时,由其它消息通知窗口。”

“在对象导向的程序设计中,对象是程序与数据的组合。窗口是一种对象,其程序是窗口消息处理程序。数据是窗口消息处理程序保存的信息和Windows为每个窗口以及系统中那个窗口类别保存的信息。”

“Windows程序开始执行后,Windows为该程序建立一个「消息队列」。这个消息队列用来存放该程序可能建立的各种不同窗口的消息。程序中有一小段程序代码,叫做「消息循环」,用来从队列中取出消息,并且将它们发送给相应的窗口消息处理程序。有些消息直接发送给窗口消息处理程序,不用放入消息队列中。”

/*------------------------------------------------------------------------       
  HELLOWIN.C -- Displays "Hello, Windows 98!" in client area       
                 (c) Charles Petzold, 1998       
-----------------------------------------------------------------------*/       
#include <windows.h>      

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;       

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,       
                   PSTR szCmdLine, int iCmdShow)       
{       
    static TCHAR szAppName[] = TEXT ("HelloWin") ;       
    HWND   hwnd ;       
    MSG    msg ;       
    WNDCLASS wndclass ; 
 wndclass.style        = CS_HREDRAW | CS_VREDRAW ;    
 wndclass.lpfnWndProc  = WndProc ;
    wndclass.cbClsExtra   = 0 ;       
    wndclass.cbWndExtra   = 0 ;       
    wndclass.hInstance    = hInstance ;       
    wndclass.hIcon        = LoadIcon (NULL, IDI_APPLICATION) ;     
 wndclass.hCursor      = LoadCursor (NULL, IDC_ARROW) ;       
 wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ;
    wndclass.lpszMenuName  = NULL ;      
    wndclass.lpszClassName= szAppName ;      

    if (!RegisterClass (&wndclass))       
    {       
            MessageBox (  NULL, TEXT ("This program requires Windows NT!"),       
                                  szAppName, MB_ICONERROR) ;       
            return 0 ;      
    }       
    hwnd = CreateWindow( szAppName,      // window class name       
                   TEXT ("The Hello Program"),   // window caption       
                   WS_OVERLAPPEDWINDOW,  // window style       
                   CW_USEDEFAULT,// initial x position       
                   CW_USEDEFAULT,// initial y position       
                   CW_USEDEFAULT,// initial x size       
                   CW_USEDEFAULT,// initial y size       
                   NULL,                 // parent window handle      
       NULL,            // window menu handle      
       hInstance,   // program instance handle
       NULL) ;      // creation parameters     
          
    ShowWindow (hwnd, iCmdShow) ;       
    UpdateWindow (hwnd) ;    
 
 while (GetMessage (&msg, NULL, 0, 0))       
    {       
            TranslateMessage (&msg) ;       
          DispatchMessage (&msg) ;       
    }       
    return msg.wParam ;       
}
       
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)       
{       
    HDC    hdc ;       
    PAINTSTRUCT ps ;       
    RECT         rect ;       
 
 switch (message)       
    {
 case WM_CREATE:
   PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;      
 return 0 ;

    case   WM_PAINT:       
            hdc = BeginPaint (hwnd, &ps) ; 
            GetClientRect (hwnd, &rect) ;    
            DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,       
                   DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;      
   EndPaint (hwnd, &ps) ;     
   return 0 ;    
 case   WM_DESTROY:
   PostQuitMessage (0) ;
   return 0 ;
    }
 return DefWindowProc (hwnd, message, wParam, lParam) ;       
}

“虽然只有80行程序代码,这个窗口却令人惊讶地具有许多功能。您可以用鼠标按住标题列,在屏幕上移动窗口;可以按住大小边框,改变窗口的大小。在窗口大小改变时,程序自动地将「Hello, Windows 98!」字符串重新定位在显示区域的中央。您可以按最大化按钮,放大HELLOWIN以充满整个屏幕;也可以按最小化按钮,将程序缩小成一个图示。您可以在系统菜单中执行所有选项(就是按下在标题列最左端的小图示);也可以从系统菜单中选择 Close选项,或者单击标题列最右端的关闭按钮,或者双击标题列最左端的图标,来关闭窗口以终止程序的执行。”

“不要费力气去记忆Windows程序设计中的数值常数。实际上,Windows中使用的每个数值常数在表头文件中均有相应的标识符定义。”

“HELLOWIN.C也有一个WinMain函数,但它还有另外一个函数,名为WndProc。这就是窗口消息处理程序。注意,在HELLOWIN.C中没有呼叫WndProc的程序代码。当然,在WinMain中有对WndProc的参考,而这就是该函数要在程序开头附近声明的原因”

 

Windows表头文件中定义的四种数据结构

结构

含义

MSG

消息结构

WNDCLASS

窗口类别结构

PAINTSTRUCT

绘图结构

RECT

矩形结构

 还有三个大写标识符,用于不同型态的「句柄」:

标识符

含义

HINSTANCE

执行实体(程序自身)句柄

HWND

窗口句柄

HDC

设备内容句柄

句柄在Windows中使用非常频繁。还有HICON(图标句柄)、HCURSOR(鼠标光标句柄)和HBRUSH(画刷句柄)。

“句柄是一个(通常为32位的)整数,它代表一个对象。Windows中的句柄类似传统C或者MS-DOS程序设计中使用的文件句柄。程序几乎总是通过呼叫Windows函数取得句柄。程序在其它Windows函数中使用这个句柄,以使用它代表的对象。代号的实际值对程序来说是无关紧要的。但是,向您的程序提供代号的Windows模块知道如何利用它来使用相对应的对象。”

经常用到的变量前缀

前缀

数据型态

c

char或WCHAR或TCHAR

by

BYTE (无正负号字符)

n

short

i

int

x, y

int分别用作x坐标和y坐标

cx, cy

int分别用作x长度和y长度;C代表「计数器」

b或f

BOOL (int);f代表「旗标」

w

WORD (无正负号短整数)

l

LONG (长整数)

dw

DWORD (无正负号长整数)

fn

function(函数)

s

string(字符串)

sz

以字节值0结尾的字符串

h

句柄

p

指标

 

 

asp.net 皮肤功能的应用:【上一篇】
v就会想起我得童年,一切是那么的美好, 然而我要面对的是残酷的高考:【下一篇】
【相关文章】
  • 使用 Java 访问 Windows 注册表(原创)
  • 10分钟在windows下面搭建一个cvs server.
  • Windows Vista 产品兼容性讲座 - 对可执行文件签名 Code signing Procedure
  • NDIS Debugging Tips 0x02 What's the system routine used to flush DMA cache of Windows?
  • API Spying Techniques for Windows 9x, NT and 2000
  • Windows NT FileSystem Internals》学习笔记之Complete IRP
  • Windows NT FileSystem Internals》学习笔记之IO_STACK_LOCATION的结构
  • Windows NT File System Internals》学习笔记之物理内存管理简介
  • 读 《Windows程序设计》
  • Windows界面程序的数年挣扎:经验与教训——补完
  • 【随机文章】
  • ESCM,你的企业重新设计了吗?
  • 用DHTML制作带链接的滚动公告栏
  • 熊猫烧香 源码 有兴趣的来看看
  • 幻魔霸主 前九关攻略
  • Linux网络安全之经验谈(5)
  • DELPHI中优秀的字符串分割函数
  • php+omni 简单易行
  • 用位运算实现求绝对值-有效避开if-else判断
  • 自写的一个SQLite数据库操作类:sqlite_db
  • oracle中pro*c的学习
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.