设为首页 收藏本站
查看: 1528|回复: 0

[经验分享] 第一个真正的Windows程序

[复制链接]

尚未签到

发表于 2018-6-19 13:44:32 | 显示全部楼层 |阅读模式
  编写Windows程序,起首要包括 windows.h 头文件。windows.h 还包括了其他一些Windows头文件,例如:

  •   windef.h:根本类型界说
  •   winbase.h:内核函数
  •   wingdi.h:用户接口函数
  •   winuser.h: 图形装备接口函数
  这些头文件界说了Windows的一切数据类型、函数原型、数据构造和符号常量,也就是说,一切的Windows API都在这些头文件中声明。
  在C言语中,程序多是“黑屏”的,称为掌握台程序(Console Application)。这套教程要讲的是带界面的Windows程序(Windows Application),也称为GUI程序(GUI Application)。
  掌握台程序以 main() 为进口函数,Windows程序以 WinMain() 为进口函数,静态链接库(DLL)以 DllMain() 为进口函数(请检查 静态链接库DLL教程),分歧的进口函数决议了分歧类型的程序。
  WinMain() 函数的原型为:
int WINAPI WinMain( HINSTANCE hInstance, // 以后窗口句柄 HINSTANCE hPrevInstance, // 前一个窗口句柄,Win32下为NULL(Win16留下的废料,今朝已弃用) LPSTR lpCmdLine, // 敕令行参数 int nCmdShow // 窗口显示方法 );  先不要急于了解这些参数的寄义,我先给人人写一个复杂的不带黑屏的、真正的Windows程序:
#include <windows.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ // 挪用API 函数MessageBox int nSelect = MessageBox(NULL, TEXT("你好,欢迎离开C言语中文网!"), TEXT("Welcome"), MB_OKCANCEL); if(nSelect == IDOK){ MessageBox(NULL, TEXT("你点击了“肯定”按钮"), TEXT("提醒"), MB_OK); }else{ MessageBox(NULL, TEXT("你点击了“撤消”按钮"), TEXT("提醒"), MB_OK); } return 0; }  编译并运转,会弹出一个对话框,如下所示:
DSC0000.png

  点击“肯定”或“撤消”按钮,又会弹出一个新的提醒框。人人可以亲身运转一下,会有真实的体验。
  本来没有main()函数,没有#include <stdio.h>的C言语程序也是可以运转的!
  MessageBox() 函数是浩瀚API中的一个,用于弹出一个指定作风的对话框,其原型为:
int WINAPI MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType );  WINAPI 为宏界说#define  WINAPI  __stdcall,表现函数挪用方法,临时可以不睬会,不影响代码编写,只需求晓得MessageBox()前往值为 int,表现按下的按钮。有兴味的读者可以检查:__stdcall,__cdecl,__pascal,__fastcall的差别
  参数阐明:

  •   hWnd:该音讯框的父窗口句柄,假如此参数为NULL,则该音讯框没有具有父窗口。人人不必急于了解这个参数,后续会具体解说。
  •   lpText:音讯框的内容。LPCTSTR 是自界说数据类型,等价于 const char *。
  •   lpCaption:音讯框的题目。
  •   uType:对话框的按钮款式和图标。
  uType 支撑的按钮款式:
按钮寄义MB_OK默许值,有一个“确认”按钮在外面MB_YESNO有“是”和“否”两个按钮在外面MB_ABORTRETRYIGNORE有“中断”,“重试”和“跳过”三个按钮在外面MB_YESNOCANCEL有“是”,“否”和“撤消”三个按钮在外面MB_RETRYCANCEL有“重试”和“撤消”两个按钮在外面MB_OKCANCEL有“肯定”和“撤消”两个按钮在外面  这些按钮多是宏界说:
#define MB_OK 0x00000000L #define MB_OKCANCEL 0x00000001L #define MB_ABORTRETRYIGNORE 0x00000002L #define MB_YESNOCANCEL 0x00000003L #define MB_YESNO 0x00000004L #define MB_RETRYCANCEL 0x00000005L  你也可以测验考试用数字来表现按钮,例如:
MessageBox(NULL, TEXT("你好,欢迎离开C言语中文网!"), TEXT("Welcome"), 1);  也会生成与下面相反的对话框。
  除了按钮,uType 还支撑图标(图标对用户有提示感化):
图标寄义MB_ICONEXCLAMATION一个赞叹号呈现在音讯框: DSC0001.png MB_ICONWARNING一个赞叹号呈现在音讯框(同上)MB_ICONINFORMATION一个圆圈中小写字母i构成的图标呈现在音讯框: DSC0002.png MB_ICONASTERISK一个圆圈中小写字母i构成的图标呈现在音讯框(同上)MB_ICONQUESTION一个成绩标志图标呈现在音讯框: DSC0003.png MB_ICONSTOP一个中止音讯图标呈现在音讯框: DSC0004.png MB_ICONERROR一个中止音讯图标呈现在音讯框(同上)MB_ICONHAND一个中止音讯图标呈现在音讯框(同上)  这些图标也多是宏界说:
#define MB_ICONHAND 0x00000010L #define MB_ICONQUESTION 0x00000020L #define MB_ICONEXCLAMATION 0x00000030L #define MB_ICONASTERISK 0x00000040L  假如愿望同时界说按钮和图标的款式,可以运用或运算|,例如:
MessageBox( NULL, TEXT("你好,欢迎离开C言语中文网!"), TEXT("Welcome"), MB_OKCANCEL | MB_ICONINFORMATION);  会弹出如下的对话框:
DSC0005.png

  与下面的对话框比拟,多出了一个图标,同时还能听到提醒音(Win7 有,XP 和 Win8 读者可以亲身测试)。
  人人有没有发现,按钮多是用十六进制的第1位(二进制前4位)来表现,图标多是运用十六进制第2位(二进制第5~8位)来表现,停止或运算,每一个位都不会改动,如下图所示:
DSC0006.png

  Windows 经过检测第1位的值来肯定按钮的款式,检测第2位的值来肯定图标款式。
  再看来一下MessageBox() 的前往值。
  MessageBox() 前往被按下的按钮,以数字表现,这些数字都被界说成了宏,如下所示:
前往值寄义IDOK用户按下了“确认”按钮IDCANCEL用户按下了“撤消”按钮IDABORT用户按下了“中断”按钮IDRETRY用户按下了“重试”按钮IDIGNORE用户按下了“疏忽”按钮IDYES用户按下了“是”按钮IDNO用户按下了“否”按钮  对应的宏界说为:
#define IDOK 1 #define IDCANCEL 2 #define IDABORT 3 #define IDRETRY 4 #define IDIGNORE 5 #define IDYES 6 #define IDNO 7

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-525926-1-1.html 上篇帖子: Windows平台mingw编译器 mysql 下篇帖子: 与windows编程有关的主要概念
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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