WindowsAPI每日一练(1) MessageBoxA

WindowsAPI每日一练系列 :https://www.cnblogs.com/LexMoon/category/1246238.html  WindowsAPI每日一练(1) WinMain

要跟计算机进行交互,就需要计算机显示信息给人看到,或者发出声音给人听到,然后人看到或听到相应的信息后,再输入其它信息给计算机,这样就可以让计算机进行数据处理,把结果显示给我们。现在就来编写一个最简单的Windows应用程序,让它提示一行文字给我们看到,这就是简单的目标。

 1 #include <windows.h>
 2
 3 int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance
 4 HINSTANCE hPrevInstance, // handle to previous instance
 5 LPSTR lpCmdLine, // command line
 6 int nCmdShow // show state
 7 ){
 8     HWND hwnd = GetDesktopWindow();
 9     MessageBoxA(hwnd,"第一个例子","这是标题",MB_OK);
10     return 0;
11 }

下图为VC++6.0中运行效果

MessageBoxA(hwnd,text文本内容,title标题,按钮类型);

hWnd: 此参数代表消息框拥有的窗口。如果为NULL,则消息框没有拥有窗口。

按钮:


按钮参数

含义

MB_OK

默认值。有一个确认按钮在里面。

MB_YESNO

有是和否在里面。

MB_ABORTRETRYIGNORE

有Abort(放弃),Retry(重试)和Ignore(跳过)

MB_YESNOCANCEL

消息框含有三个按钮:Yes,No和Cancel

MB_RETRYCANCEL

有Retry(重试)和Cancel(取消)

MB_OKCANCEL

消息框含有两个按钮:OK和Cancel
 1 //按钮
 2 #define MB_OK 0x00000000L
 3 #define MB_OKCANCEL 0x00000001L
 4 #define MB_ABORTRETRYIGNORE 0x00000002L
 5 #define MB_YESNOCANCEL 0x00000003L
 6 #define MB_YESNO 0x00000004L
 7 #define MB_RETRYCANCEL 0x00000005L
 8 //图标
 9 #define MB_ICONHAND 0x00000010L
10 #define MB_ICONQUESTION 0x00000020L
11 #define MB_ICONEXCLAMATION 0x00000030L
12 #define MB_ICONASTERISK 0x00000040L
13 #define MB_USERICON 0x00000080L
14 //图标声明
15 #define MB_ICONWARNINGMB_ICONEXCLAMATION
16 #define MB_ICONERRORMB_ICONHAND
17 #define MB_ICONINFORMATIONMB_ICONASTERISK
18 #define MB_ICONSTOPMB_ICONHAND
19 //默认按钮声明
20 #define MB_DEFBUTTON1 0x00000000L
21 #define MB_DEFBUTTON2 0x00000100L
22 #define MB_DEFBUTTON3 0x00000200L
23 #if(WINVER>=0x0400)
24 #define MB_DEFBUTTON4 0x00000300L//如果支持第四个MessageBox按钮的话,定义DEFButton4
25 #endif
26 //对话框模型定义
27 #define MB_APPLMODAL 0x00000000L
28 #define MB_SYSTEMMODAL 0x00001000L
29 #define MB_TASKMODAL 0x00002000L
30 #define MB_HELP 0x00004000L//是否拥有帮助按钮
31 //特殊声明
32 #define MB_NOFOCUS 0x00008000L
33 #define MB_SETFOREGROUND 0x00010000L
34 #define MB_DEFAULT_DESKTOP_ONLY 0x00020000L
35 #define MB_TOPMOST 0x00040000L
36 #define MB_RIGHT 0x00080000L
37 #define MB_RTLREADING 0x00100000L

图标:

参数 含义

MB_ICONEXCLAMATION
一个惊叹号出现在消息框

MB_ICONWARNING
一个惊叹号出现在消息框

MB_ICONINFORMATION
一个圆圈中小写字母i组成的图标出现在消息框

MB_ICONASTERISK
一个圆圈中小写字母i组成的图标出现在消息框

MB_ICONQUESTION
一个问题标记图标出现在消息框

MB_ICONSTOP
一个停止消息图标出现在消息框

MB_ICONERROR
一个停止消息图标出现在消息框

MB_ICONHAND
一个停止消息图标出现在消息框

形态:


参数

含义

MB_APPLMODAL

在hwnd参数标识的窗口中继续工作以前,用户一定响应消息框。但是,用户可以移动到其他线程的窗口且在这些窗口中工作。根据应用程序中窗口的层次机构,用户则以移动到线程内的其他窗口。所有母消息框的子窗口自动地失效,但是弹出窗口不是这样。如果既没有指定MB_SYSTEMMODAL也没有指定MB_TASKMOOAL,则MB_APPLMODAL为缺省的。

MB_SYSTEMMODAL

除了消息框有WB_EX_TOPMOST类型,MB_APPLMODAL和MB_SYSTEMMODAL一样。用系统模态消息框来改变各种各样的用户,主要的损坏错误需要立即注意(例如,内存溢出)。如果不是那些与hwnd联系的窗口,此标志对用户对窗口的相互联系没有影响。

MB_TASKMODAL

如果参数hwnd为NULL的话,那么除了所有属于当前线程高层次的窗口失效外,MB_TASKMODALL和MB_APPLMODAL一样。当调用应用程序或库没有一个可以得到的窗口句柄时,使用此标志。但仍需要阻止输入到调用线程的其他窗口,而不是搁置其他线程。

其他:


标志

含义

MB_DEFAULT_DESKTOP_ONLY

接收输入的当前桌面一定是一个缺省桌面。否则,函数调用失败。缺省桌面是一个在用户已经纪录且以后应用程序在此上面运行的桌面。

MB_HELP

把一个Help按钮增加到消息框。选择Help按钮或按F1产生一个Help事件。

MB_RIGHT

文本为右调整

MB_RTLREADING

用在Hebrew和Arabic系统中从右到左的顺序显示消息和大写文本。

MB_SETFOREGROUND

消息框变为前景窗口。在内部系统为消息个调用SetForegroundWindow函数。

MB_TOPMOST

消息框用WS_EX_TOPMOST窗口类型来创建MB_SERVICE_NOTIFICATION。

返回值:


ID

选择了……

IDOK(1)

OK

IDCANCEL(2)

CANCEL

IDABORT(3)

ABORT

IDRETRY(4)

RETRY

IDIGNORE(5)

IGNORE

IDYES(6)

YES

IDNO(7)

NO

备注:

通过将 uType 参数设置为相应的标志值,可以在消息框中系统图标,具体图标可参见MSDN网站。


图标

标志位值
 
MB_ICONHAND, MB_ICONSTOP, 或者MB_ICONERROR
 
MB_ICONQUESTION
 
MB_ICONEXCLAMATION 或者 MB_ICONWARNING
 
MB_ICONASTERISK 或者 MB_ICONINFORMATION

添加两个从右到左标记 (RLMs),Unicode 格式字符中用 U+200F表示。在消息框显示字符串的开头被由 MessageBox 渲染引擎解释,以致造成 MessageBox 的阅读顺序,呈现为从右向左 (RTL) 。

当您使用一个系统模式消息框指示时,当系统内存不足时,由 lpText 和 lpCaption 的参数的字符串不应被从资源文件,因为加载资源的尝试可能会失败。

如果在一个对话框存在时创建一个消息框,则使用对话框的句柄作为hWnd 参数。hWnd参数不应指定为一个子窗口,就像对话框中的控件一样。

 1 #include<windows.h>
 2 //切记!当调用<windows.h>时,不要调用MFC!(Afx.h)
 3 int main()
 4 {
 5     int result = MessageBox( NULL , TEXT("这是对话框") , TEXT("你好") , MB_ICONINFORMATION|MB_YESNO);
 6     switch(result)/*注意!使用Unicode应用TEXT包围字串*/
 7 {
 8     case IDYES:MessageBox(NULL,TEXT("您选择了YES"),TEXT("YES"),MB_OK);break;
 9     case IDNO:MessageBox(NULL,TEXT("您选择了NO"),TEXT("NO"),MB_OK);break;
10 }
11 return 0;
12 }

第一步:弹出对话框。语句:

1 int result = MessageBox(NULL,TEXT("这是对话框"),TEXT("你好"),MB_ICONINFORMATION|MB_YESNO);

对话框弹出

选择是:语句:

1 case IDYES:MessageBox(NULL,TEXT("您选择了YES"),TEXT("YES"),MB_OK);break;

选择否:语句:

1 case IDNO:MessageBox(NULL,TEXT("您选择了NO"),TEXT("NO"),MB_OK);break;

原文地址:https://www.cnblogs.com/LexMoon/p/windowsAPI01.html

时间: 2024-10-06 00:29:40

WindowsAPI每日一练(1) MessageBoxA的相关文章

CSS3每日一练之内容处理-嵌套编号

出处:http://www.w3cfuns.com/thread-5592229-1-17.html 1.大标题一   1.子标题   2.子标题   3.子标题2.大标题二   1.子标题   2.子标题3.大标题三   1.子标题   2.子标题   3.子标题 这种问题,你可能会觉得直接定义两个计数器,分别编号不就行了,于是就写出了如下代码: <!DOCTYPE HTML> <html> <head> <meta charset="gb2312&q

每日一小练——最长平台问题

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:最长平台问题 内容:一直一个已经从小到大排序的数组,这个数组中的一个平台就是连续的一串同样的元素.而且这个元素不能再延伸. 比如,在1,2,2,3,3,3,4,5,5,6中1,2,2,3,3,3,4,5,5,6都是平台.试编写一个程序,接受一个数组,把这个数组中最长的平台找出来.在这个样例中, 3,3,3就是该数组的中的最长的平台. 说明: 这个程序十分简单,可是编写好却不easy,因此在编敲代码时应注意考虑以下几点:

每日一小练——列出全部子集

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:列出全部子集 内容:写一个程序,列出{1,2,3,4,...,n}这个集合的全部子集,包含空集{ }. 解决问题的算法应该有非常多种,只是我发现了一种非常easy也非常好玩的方法,就是用二进制表示几何元素的方法 比方假设n是3,则子集有(不包含空集){1}{2}{3}{1,2}{1,3}{2,3}{1,2,3}就是1*{0,1}and2*{0,1}and3{0,1}每一个组合出现一次,所以也能够看成是{0,0,1}{0

每日一小练——按字典顺序列出所有排列

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:按字典顺序列出所有排列 内容:请写一个程序,用字典顺序列出n个元素的所有排列 这个问题有点小复杂,不是太好想,反正我是想了好久. 看到这个题目我先是想到的就是递归因为这个题目就是用指针对高位选择,然后将指针传给临近的低位再选择. 不过仔细研究原来没这么简单.以n=4举例当处理以1开头的排列时1234到1432,但是在排列2开头的时候不太好建立统一的递归关系.(没办法太统一的递归方法中将后面的数字选出来),所以将第一位分

每日一小练——快速Fibonacci数算法

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:快速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有如下规律: 尝试寻找快速的求出fn的方法 我的解法:上来没多想,打开vs2013就敲了起来,问题果然很简单,分分钟就超神..奥,不对就解决了! 其实题目中就给出了这个算法的递归形式,所以首先我想到的是递归解法,不过因为求解快速方法在递归之前,我编写了一个非递归的算法 #include <iostream> usi

CSS3每日一练之选择器-结构性伪类选择器

<!DOCTYPE HTML> <html> <head> <meta charset="gb2312"> <title>CSS3每日一练之选择器-结构性伪类选择器[四] | 前端开发网(W3Cfuns.com)!</title> <style type="text/css"> *{margin:0; padding:0;} #list{font-family:"Micro

每日一小练——按字典顺序列出全部子集

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:按字典顺序列出全部子集 内容: 请写一个程序用字典顺序把一个{1,2,3,4,...,n}集合的全部子集找出来. 解答: 想必我就不用解释什么是字典顺序了,作为乘虚猿和攻城狮大家应该懂得,无论你懂不懂,反正我懂了! 事实上我们能够先列出一个实例,观察规律: 比如n=3 {1} {1,2} {1,2,3} {1,3} {2} {2,3} {3} 能够看出这种规律(假设你说我怎么没看出来,事实上你能够再多看一会!) 令一个

每日一小练——求质数

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:求质数 内容: 试编写一个程序,找出前N个质数.如果没有进一步要求,这不是难题.但在此希望从所知的.使用除法的方法中,用最快的办法来编写程序. 我的解法:上来没多想,打开vs2013就敲了起来,问题果然很简单,分分钟就超神..奥,不对就解决了!这个题目确实很简单,先看看常规解法吧! #include <iostream> #include <math.h> #define endNum 200 using

每日一小练——等值首尾和

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:等值首尾和 内容: 假设有一个数组x[],它有n个元素,每一个都大于零:称x[0]+x[1]+...+x[i]为前置和,而x[j]+x[j+1]+...+x[n-1]为后置和.试编写一个程序,求出x[]中有多少组相同的前置和后置和. 例如:x[]的元素是3,6,2,1,4,5,2,于是x[]的前置和有以下7个,即3,9,11,12,16,21,23:后置和则2,7,11,12,14,20,23; 于是11,12,23,