之前一直学习的是控制台程序设计,后来接触MFC程序设计,中间忽略了Windows程序设计的学习,所以在开始接触MFC的时候非常迷茫,不知道MFC框架下的各个函数的意义,不明白其内部的原理及机制,只大概了解使用了函数的封装,现在将这部分知识重拾起来。

使用c语言,调用WIN32 API进行Windows程序设计,首先要包含windows.h头文件,入口函数是WinMain函数,这点不同于控制台程序的main函数入口,WINAPI是一个宏定义,实际就是__stdcall调用Windows函数的意思。

句柄概念:一个对象的值(32位int数值),通过句柄可以找到对应的对象,具体又分为窗口句柄、实例句柄、设备环境句柄、图标光标句柄等。

这个简单的Windows程序实现了以下功能:创建一个窗口,在窗口内输出“Hello,Windows 98!”文本,同时播放音乐。

具体步骤包括:创建窗口类,注册窗口类,创建窗口,更新窗口,循环等待窗口消息。

处理窗口消息需要调用窗口过程函数,LRESULT是宏定义long,CALLBACK类似于WINAPI,传参包括窗口句柄及消息类型等,每个窗口有自己的窗口过程函数。

除了自定义消息响应,也可使用缺省的窗口响应DefWindowProc。

#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//回调函数声明
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)//WinMain入口函数
{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,TEXT("The Hello Program"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);//显示窗口ShowWindow(hwnd,iCmdShow);//WinMain传递给iCmdShow的为SW_SHOWNORMALUpdateWindow(hwnd);//更新窗口或者重画窗口,通过调用WM_PAINT消息//循环获取消息队列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;//PAINT结构体RECT rect;//RECT结构体switch(message)//判断消息类型{case WM_CREATE://创建窗口消息PlaySound(TEXT("1.mp3"),NULL,SND_FILENAME|SND_ASYNC);//播放声音return 0;case WM_PAINT://PAINT消息hdc=BeginPaint(hwnd,&ps);//开始PAINTGetClientRect(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);//返回缺省的窗口过程函数
}

Windows程序设计的第一个实例相关推荐

  1. Windows程序设计设计第一个窗口

    窗口调用的函数的简短解释: 来自小甲鱼的窗口模板: /* -------------------------------------------------------------------MyWi ...

  2. C语言Windows程序设计 - 【第一个属于自己的窗口】!

    ☺创建属于自己的窗口 ================== ۞创建窗口前的准备 在创建窗口前我们先来熟悉几个名词, 这些名词现在可以暂时不去透彻的进行理解, 只需要印象中知道有这么回事就行. 1> ...

  3. Windows程序设计_Chap02_Unicode_学习笔记

    Windows程序设计_Chap02_Unicode_学习笔记 ――By: Neicole(2013.05.24) 01. 开篇 <Windows程序设计>的第2章,主要内容为Unicod ...

  4. 《Windows 程序设计(第3版)》——6.7 【实例】窗口查看器

    本节书摘来自异步社区<Windows 程序设计(第3版)>一书中的第6章,第6.7节,作者:王艳平 , 张铮著,更多章节内容可以访问云栖社区"异步社区"公众号查看 6. ...

  5. windows 程序设计 第一章

    MD,在公司实在蛋疼,每天捣鼓那些废码子,看到哥们有本windows程序设计,闲来没事总结总结,提高提高,也免得回家闲着蛋都碎了. 第一章简单一些,多是概念,也不用太深入看,当然要是全记住,跟同行吹牛 ...

  6. Windows程序设计学习笔记(1):一个简单的windows程序

    <Windows程序设计>(第五版)(美Charles Petzold著) 1 #include<windows.h> 2 3 LRESULT CALLBACK WndProc ...

  7. createprocess重启程序_C++_VC程序设计中CreateProcess用法注意事项,对于windows程序设计来说,启动 - phpStudy...

    VC程序设计中CreateProcess用法注意事项 对于windows程序设计来说,启动一个进程有三种方法:WinExec,ShellExecute,CreateProcess.这里仅对Create ...

  8. 20155303 2016-2017-2 《Java程序设计》第一周学习总结

    20155303 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 浏览教材,根据自己的理解每章提出一个问题 Chapter1 Java平台概论:MyProgr ...

  9. windows程序设计(一)

    近期,我们在进行windows程序设计的选修课,今天开始,给大家推一波windows程序设计的简单操作及实例. 第一推,先给大家看界面显示的函数吧! 首先,创建win32项目,定义为空文件. 然后,新 ...

  10. Windows程序设计入门教程[来自邪恶八进制信息安全团队(www.eviloctal.com)]

    Windows程序设计入门教程 前骤: 1.第一个windows程序: 先讲几个专有名词:HINSTANCE 由handle(句柄)和instance(实例) 句柄,类似于C中的指针,指向资源,是资源 ...

最新文章

  1. 既使用maven编译,又使用lib下的Jar包
  2. A+B Problem III
  3. Nagios监控Windows server 2003 系统
  4. Android平台调用WebService详解
  5. Ajax系列之JSON数据格式
  6. 7.泡妞与设计模式(八)模板模式
  7. linux编译准备,Linux 下编译指南
  8. python开发自己的工具包_爬虫开发python工具包介绍 (4)
  9. 对话李飞飞:云数据库战争已经进入下半场
  10. 旧手机物联网_为了能让你的智能手机用十年,他们给旧手机做了一个操作系统...
  11. 资源池、虚拟机、集群的关系
  12. js调用网页打印接口
  13. 为何学习大数据,要先学Java
  14. Oracle数据库查询语句去重,Oracle数据库之SQL---select查询
  15. Halcon学习笔记之测量系列-卡尺测量
  16. 诺丁汉大学计算机科学世界排名,2020年诺丁汉大学计算机科学专业研究生申请条件及世界排名|学费介绍...
  17. JUC并发编程第十四篇,StampedLock(邮戳锁)为什么比ReentrantReadWriteLock(读写锁)更快!
  18. GitHub标星8W,Google面试指南
  19. 《AI图像搜索引擎》笔记
  20. Pyecharts 静态图片输出ppt中动态图表

热门文章

  1. js php c语言for循环,JS for循环语句
  2. javaweb的热部署
  3. window 装oracle,在Window下安装Oracle
  4. 艾蔻智能机器人怎么连接网络_智能建筑背后的关键技术:无处不在的网络连接...
  5. anaconda moviepy_Anaconda使用之安装篇(Windows)
  6. No module named ‘gym‘
  7. (3)redis.config配置文件详解
  8. iOS数据库的使用(二):sqlite教程
  9. 十四、JS同步异步知识点,重点(Node.js-fs模块补充篇)
  10. windows PAE扩展和AWE编程