API入门系列之六 -自己实现MessageBox

我在第四篇文章:一个相当简单的SDK程序中讲到了通过调用MessageBoxAPI函数来弹出一个对话框,那你有没有想过,我们一句简单的代码背后所隐藏的细节是怎么的呢,那时候让你了解这些未免还早了些,不过现在时机到了,通过一些基本的API函数调用来实现一个自己的对话框其实也不是很难,那么 这一篇文章就是这个目的。并顺带介绍一些基本API的应用,由于前面五篇文章的铺垫,我相信你对SDK 的程序的大致结构和相关字符处理都有所了解了,所以在这篇文章中的这些知识点,我就不再多说,以 免有些人觉得我实在太过啰嗦。实在疑惑的,可以参看前面的文章。

首先我先大概的列出我们为完成这个任务所要用到的一些API函数他

SetWindowText    设置窗口的标题

GetClientRect 得到窗口客户区的大小信息

GetWindowLongPtr 通过窗口句柄得到和窗口的相关联信息

CreateWindowEx 创建窗口

BeginPaint 得到窗口的设备句柄

EndPaint 释放窗口的设备句柄

DrawText 通过设备句柄在窗口上画出文字

好了,就这些函数,我们就能自己实现有一个确定按钮并在确定按钮正上方显示提示信息的简易的对 话框了,不过这个对话框可是我们一句一句代码自己实现的哟~~还是比较有成就感吧~

程序的大体框架呢还是我们上一篇文章中的框架,注册窗口类,创建一个主窗口,消息循环,窗口消 息处理函数。不过要我们需要在窗口消息处理函数中添加一些代码来完成我们需要的功能。在什么地方 添加呢?  上个程序,我们只处理WM_DESTROY这个消息。对于这个消息我不再做讲解,不懂的或者忘记 了的可以自己MSDN或者看上一篇文章,这里我们要添加对两个消息的处理代码,首先是WM_CREATE,这个 消息会在一个窗口被创建的时候被发送到窗口消息处理函数,如果一些事情需要在一个窗口刚被创建的 时候执行,那么通过处理WM_CREATE最合适不过啦,代码如下:

case WM_CREATE:

{

RECT rctClient; //用来存放主窗口客户区大小信息

const int buttonWidth = 80; //按钮的宽

const int buttonHeight = 25; /按钮的高

GetClientRect( hwnd, &rctClient ); //得到主窗口客户区的大小信息

HINSTANCE hInst = (HINSTANCE)GetWindowLongPtr( hwnd, GWLP_HINSTANCE );

HWND hButton = CreateWindowEx( 0L, _T("button"), _T("确定"),  WS_VISIBLE |  WS_CHILD , rctClient.right/2-buttonWidth/2, rctClient.bottom/2- buttonHeight/2, buttonWidth,  buttonHeight, hwnd, (HMENU)2, hInst, NULL );

SetWindowText( hwnd, _T("自定义对话框") );

break;

}

时间: 2024-10-22 09:26:31

API入门系列之六 -自己实现MessageBox的相关文章

API入门系列之七 -完善MessageBox

各位不好意思,前几天有些事很忙,昨天才稍稍有时间空闲下来,所以我将我的API入门系列文章继续下去,上一篇<自己实现MessageBox>中我们基本已经实现了一个对话框了,可以在中央显示自己的文字,并且显示一个确定按钮,可是,上一篇完的时候我留下了一个问题,那就是那个确定按钮并不会根据窗口的大小的改变而改变.那么我们怎么来解决这个问题呢? 我给出了提示可以通过处理WM_SIZE来完成这个目的.那么今天我们就来完成这一遗留的问题.所要使用到的新的API函数也不多,就两个,要处理的消息也就两个WM_

损失函数减肥用,神经网络调权重(深度学习入门系列之六)

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 系列文章: 一入侯门"深"似海,深度学习深几许(深度学习入门系列之一) 人工"碳"索意犹尽,智能"硅"来未可知(深度学习入门系列之二) 神经网络不胜语,M-P模型似可寻(深度学习入门系列之三) "机器学习"三重门,"中庸之道"趋若人(深度学习入门系列之四) Hello World感知机,懂你我心才安息 (深度学习入门系列

API入门系列之一 -那‘烦人’的Windows数据类型

Hello Everybody This is beyondcode 大家好 再次自我介绍一下 我是beyondcode, 这次心 血来潮, 计划着做一系列关于Windows API 编程的教程,用于帮助一些在Windows API编程上有疑惑的, 纳闷的,迷惑的新手朋友们. 先解释一些术语或名词吧 SDK是Software Development Kit的简写,也就是软件开发包的意思,其中就包含了我们写程序要用 到的一些头文件,库,工具,帮助文档之类的. Windows API编程是指调用Wi

API入门系列之四 -一个相当简单的SDK程序

大家好,还是我beyondcode,再次见面,前面介绍的那么多'理论知识',你们都懂了吗? 就 算还没有彻底领悟,但至少还是有那么一点意识了吧,知道有那么一回事了吧.这一篇我打算通过一个 小小小例子,来回忆一下我们以前介绍的相关知识,如Windows的数据类型,特别是和字符和字符串操作 相关的数据类型,还有就是Unicode和ASCII在API函数上的具体体现. 另外,SDK编程交流群已经 建立,很多朋友踊跃参加,系列文章和群的发展离不开你们.群号:81543028. Ok,我们正式开 始,我打

API入门系列之二 -Unicode还是ASCII

今天,开始第二篇文章,这章我准备介绍一下Windows平台下编程中Unicode编码和ASCII编码的相关 问题. 不知道各位新手朋友们遇到这样的问题没有呢,新建一个Windows应用程序,调用MessageBox这个函 数,准备让它弹出一段提示文本,可是编译器在编译的时候却报错说,不能将const char*或者const char[]转换为const wchar_t* 之类的提示呢,很多刚接触Windows API编程的朋友们在 这里可能就卡住了,不知如何下手解决了,其实,这就是Unicod

API入门系列之五 -一个正儿八经的SDK程序

上一篇,讲了一个简单的SDK程序的多种版本的编写,弹出了一个窗口,显示了我们计算1到10的结果 ,计算的程序不是重点,重点在于,一:让大家认识到Unicode版本的程序和ASCII版本的程序在编程方 面的区别,以及怎么样编写出通用代码的程序.二:怎么样运用API或者c++库函数格式化非字符数据到 一个字符串中显示出来. 不过,那个相当简单的程序,还算不上是一个正儿八经的SDK程序,也 就是说还不是一个纯爷们儿,因为我们并亲自完成一个SDK程序的经典步骤.而是调用了一个MessageBox API

API入门系列之三 -那迷惑人的Windows字符和字符指针类型

大家好,通过前面两篇打头文章,我也看了留言,感谢那些给我提意见的人和指出错误之处的人.再次谢谢你们的支持.另外,Windows SDK编程交流群已经建立了,欢迎各位志同道合者加入进行交流(群号:81543028) 本打算通过前面两篇文章的讲解,后来的系列就可以通过使用一些简单的,常用的API写一些示例程序的讲解进行,但是发现还有一个不得不先讲一讲的要点,Windows下和字符串操作有关的数据类型.我看留言中也有几位朋友提到了,那我就在这篇中讲它吧.不会很枯燥的,各位慢慢看下去就是了. 下面我罗列

使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【三】——Web Api入门

原文:使用ASP.NET Web Api构建基于REST风格的服务实战系列教程[三]--Web Api入门 系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 前言 经过前2节的介绍,我们已经把数据访问层搭建好了,从本章开始就是Web Api部分了.在正式开始之前,再一次回顾一下Web Api的应用场景:Web Api可以与 MVC,WebForm结合使用,也可以作为一个单独的Web服务.在正式讨论Web Api的配置以及如何构造我们的URI来消

Hello World感知机,懂你我心才安息 (深度学习入门系列之五)

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 系列文章: 一入侯门"深"似海,深度学习深几许(深度学习入门系列之一) 人工"碳"索意犹尽,智能"硅"来未可知(深度学习入门系列之二) 神经网络不胜语,M-P模型似可寻(深度学习入门系列之三) "机器学习"三重门,"中庸之道"趋若人(深度学习入门系列之四) 原文再续,书接上回. 5.1 网之初,感知机 我们知道,<