网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
从实例看Windows API程序设计
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式

作者: 刘雨楠、谭章熹

来源:www.ccidnet.com

用户在使用VC++开发应用程序时,主要有两种方法:调用Windows提供的API函数(Application Programming Interface)和直接使用Microsoft提供的MFC类库(Microsoft Foundation Class)。与MFC相比,API更贴近操作系统,也是每一个Windows程序员必须掌握的。

本文将以一个类似Windows的计算器程序为例,简述Windows API程序设计的方法和一些基本技巧。

思路和算法
1、首先构造输入和输出界面
首先构造输入和输出界面。在主窗口中,用CreateWindow( )函数来创建按钮和编辑框等子窗口控件。这样,用户可通过按钮进行输入,并通过编辑框显示计算结果。
2、本程序通过表达式堆栈算法来支持科学计算功能
以字符型数组express[ ]存放整个表达式,并定义void Push(char)和void Pop(void)来实现向数据堆栈OVS和算符堆栈OPS压入和弹出一个操作符或数据。
3、为了进行正常的计算,必须保证表达式的合法性
程序一方面要对用户的输入加上必要的过滤,例如不允许出现非法表达式,另一方面要对非法运算数据作判断。
4、用户点击“=”完成所有的输入后,调用void CalculateOperation()函数进行计算
具体实现方法如下:用指针i从express中扫描输入的表达式,若扫描到数值,则压入数据栈OVS,若扫描到运算符则判断其优先级是否大于或等于算符堆栈OPS栈顶的优先级,如果大于其优先级则压入OPS并扫描下一字符,反之则弹出OVS和OPS栈顶元素进行一次运算,并将结果压入OVS栈。反复执行此过程,直到完成表达式的计算。

程序主体结构
本程序以WinMain( )函数为入口,并依次进行窗口类的初始化和登记,以及窗口的创建和显示。在消息循环里,主函数反复调用WinProc( )回调函数(CallBack Function)以处理捕获的消息。因此全部消息的响应代码要写在WinProc( )中,这也是用Windows API编写程序最核心的部分。

另外,用API设计程序的一大特点就是对任何元素操作都需要通过获得相应的句柄(Handle)来实现。

程序功能及特色
程序除一般的科学计算功能外,还有一些扩展功能。

1. 可动态更换背景图案
类似Winamp播放器有各种各样的Skin,本程序也可动态更换背景。其核心思路就是在WM_ERASEBKGND消息响应时,不用系统缺省的白色画刷,而用资源中的位图来重画背景。为了提高重画效率和避免闪烁,开发时一定注意不要把背景重画代码放在WM_PAINT消息响应中。

另外为使背景图案能跟随窗口尺寸变化,在显示位图时,采用StretchBlt函数代替BitBlt函数,这样在更换背景图案时,不论资源中的位图是否与当前窗口的大小相等,都会自动拉伸或收缩以适应窗口的尺寸。具体代码如下:

case WM_ERASEBKGND:
{
RECT rc;
hdc = (HDC)wParam;
// wParam的值为当前窗口的hDC
SelectObject(hdcmem,hbitmap);
GetClientRect(hwnd,&&rc);
//获得客户区域大小
StretchBlt( hdc,0,0,rc.right,rc.bottom,hdcmem,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY );
}
break;
其中,hdc是当前窗口的DC,hdcmem是与当前屏幕兼容的内存镜像设备句柄。

为了使用方便,在选单中可创建背景子选单。资源文件的代码如下:

// Menu
MENU MENU DISCARDABLE
BEGIN
POPUP "设置(&&M)"
BEGIN
POPUP "背景(&&B)"
BEGIN
MENUITEM "GREEN", IDM_GREEN
MENUITEM "SNOW", IDM_SNOW
MENUITEM "BUTTERFLY", IDM_BUTTERFLY
MENUITEM "FLOWER", IDM_FLOWER
END
END
END
// Bitmap
SNOW BITMAP MOVEABLE PURE "snow.bmp"
GREEN BITMAP MOVEABLE PURE "green.bmp"
BUTTERFLY BITMAP MOVEABLE PURE "butterfly.bmp"
FLOWER BITMAP MOVEABLE PURE "flower.bmp"
其中
  • 下一篇资讯: 用MFC如何高效地绘图
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号