第一个Win32 SDK应用程序

#include<windows.h>
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int);
LRESULT WINAPI WndProc(HWND,UINT,WPARAM,LPARAM);
// WinMain 函数
int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HWND hWnd; // 主窗口句柄
MSG msg; // 窗口消息
WNDCLASS wc; // 窗口类
if (!hPrevInstance)
{
// 填充窗口类信息
wc.style=CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc=WndProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //需要强制转换,原文:wc.hbrBackground=GetStockObject(WHITE_BRUSH);
wc.lpszMenuName=NULL;
wc.lpszClassName="SdkDemo1";
// 注册窗口类
RegisterClass(&wc);
}
// 创建应用程序主窗口
hWnd=CreateWindow ("SdkDemo1", // 窗口类名
"第一个Win32 SDK应用程序", // 窗口标题
WS_OVERLAPPEDWINDOW, // 窗口样式
CW_USEDEFAULT, // 初始化 x 坐标
CW_USEDEFAULT, // 初始化 y 坐标
CW_USEDEFAULT, // 初始化窗口宽度
CW_USEDEFAULT, // 初始化窗口高度
NULL, // 父窗口句柄
NULL, // 窗口菜单句柄
hInstance, // 程序实例句柄
NULL); // 创建参数
// 显示窗口
ShowWindow(hWnd,SW_SHOW);
// 更新主窗口客户区
UpdateWindow(hWnd);
// 开始消息循环
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

// WndProc 主窗口过程
LRESULT WINAPI WndProc (HWND hWnd,
UINT msg,
WPARAM wParam,
LPARAM lParam)
{
HDC hdc;
RECT rc;
HPEN hPen,hPenOld;
HBRUSH hBrush,hBrushOld;
switch (msg)
{
case WM_PAINT:
hdc=GetDC(hWnd);
GetClientRect(hWnd,&rc);
hPen=CreatePen(PS_SOLID,0,RGB(0,0,0));
hBrush=CreateHatchBrush(HS_DIAGCROSS,RGB(0,0,0));
hPenOld=(HPEN)SelectObject(hdc,hPen); //需要强制转换,原文:SelectObject(hdc,hPen);
hBrushOld=(HBRUSH)SelectObject(hdc,hBrush); //需要强制转换,原文:SelectObject(hdc,hBrush);
Ellipse(hdc,rc.left,rc.top,rc.right,rc.bottom);
SelectObject(hdc,hPenOld);
SelectObject(hdc,hBrushOld);
ReleaseDC(hWnd,hdc);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
break;
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}


操作步骤如下:

1.选择File菜单下的New命令,新建一个Win32 Application工程,这里我们假设对该工程命名为SdkDemo1,而事实上这完全取决于你的意愿。这个过程已经在本书的第一章中作为介绍,这里就不再重复说明了。
2. 选择Project菜单下的Add To Project|New...命令,向工程中添加一个C++ Source File (C++源文件),可以将该文件命名为winmain.cpp,不需要键入扩展名,Microsoft Developer Studio在创建文件时会自动加上.cpp的后缀名。这个过程也已经在第一章中作过介绍。阅读过该章内容的读者不应感到陌生。然后在Wordspace窗口的FileView中双击文件名winmain.cpp (在依赖于你在前面过程中的设定),输入下面的源代码即可。如果已将源代码输入为C++源文件(以.cpp为后缀名的文件),则可以使用Project|Add To Project|Files...将其添加到工程中。
3. 单击Build菜单下的Build SdkDemo1.exe或Build All或按下快捷键F7 (如果未对该快捷键做过自定义操作的话)或单击Build或BuildMinibar工具条上的按钮,编译并创建可执行文件SdkDemo1.exe,运行该可执行文件(从Developer Studio中或资源管理器均可)。

使用这种方式编写的应用程序使用调试和维护的难度很大。这个问题是使用直接使用SDK编程的固有总是。但是,我们还是有办法可以使得该程序的结构更紧凑和更集中一些,从而改善代码的可读性,也使得它更接近于使用SDK编写的真正的Win32应用程序。

转载于:https://www.cnblogs.com/xiaocai0923/archive/2011/10/21/2220100.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303193.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 分析《爱情公寓》电影,让我十年情怀一瞬间都喂了狗

深陷抄袭之名、诉讼纠纷的《爱情公寓》终于上映了。情怀粉们的力量不容小觑&#xff0c;截止到8月12&#xff0c;《爱情公寓》票房已经突破3.72亿大关&#xff0c;稳坐票房冠军的宝座&#xff0c;院线排片占比高达40.0%。和超高票房背道而驰的&#xff0c;是各大社交平台上一边…

银行背景下分库分表技术选型

业务持续增长带来的单表数据量过大&#xff0c;必然影响到数据库的读写性能&#xff0c;那到底要不要分库分表呢&#xff1f;阿里巴巴P3C规范给出一个推荐&#xff1a;【推荐】单表行数超过500万行或者单表容量超过2GB&#xff0c;才推荐进行分库分表。说明&#xff1a;如果预计…

单片机矩阵消抖延时c语言,单片机矩阵按键定时器消抖程序源码

芯片是采用的stc89c51单片机.下面是矩阵键盘的电路图&#xff0c;矩阵键盘是接在p2口的.下面是单片机部分的图,数码管显示等完整的原理图可以从http://www.51hei.com/f/ks51.pdf 这里下载本文引用地址&#xff1a;http://www.eepw.com.cn/article/201612/324612.htm下面是程序源…

资料分享 | R语言资料分享来袭

小编从大学开始&#xff0c;便开启资料收集功能。R作为一种统计分析软件&#xff0c;广泛应用于生物、医学、电商、新闻等数据相关行业&#xff0c;并已成为主流数据应用软件之一&#xff0c;经过近几年的积累和沉淀&#xff0c;再加上日常的深入研究&#xff0c;小编收集整理了…

google code for xbmc addons2

2019独角兽企业重金招聘Python工程师标准>>> http://code.google.com/p/xbmc-skin-convergence/downloads/list 转载于:https://my.oschina.net/u/174445/blog/33955

ASP.NET Core中使用令牌桶限流

在限流时一般会限制每秒或每分钟的请求数&#xff0c;简单点一般会采用计数器算法&#xff0c;这种算法实现相对简单&#xff0c;也很高效&#xff0c;但是无法应对瞬时的突发流量。比如限流每秒100次请求&#xff0c;绝大多数的时间里都不会超过这个数&#xff0c;但是偶尔某一…

c语言怎样表示运行时间,C语言运行时间

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#include#define C 90000000void main(){long int i;printf(" OOOOOOO ****** ****** OOO OOO \n");for(i0;i<C;i);printf(" OOOOOOO …

10.26

1. 去掉工程中添加的新类 2. DirectUI 3. MFC 文件操作 4. http://www.cnblogs.com/jiaxiaoai/archive/2011/07/04/2097188.html 5. ATL,COM 6. 全局变量转载于:https://www.cnblogs.com/shiney/archive/2011/10/26/2224799.html

我们需要什么样的开源教育?

点击上方“开源社”关注我们| 作者&#xff1a;庄表伟| 编辑&#xff1a;沈于蓝| 设计&#xff1a;宋传琪‍文章缘起‍写这篇文章的原因&#xff0c;是和几个朋友的闲聊。再之前&#xff0c;是因为看到了几篇文章2020-12-18 《欢迎加入&#xff01;开放原子大学首批开源讲师认证…

谷歌十年,我的认知被彻底颠覆

这个问题是提给自己的&#xff0c;算是对我 Google 十年的一个小结。强调“不装逼”&#xff0c;主要是提醒自己不要陷入下列俗套&#xff1a;离职后靠黑前雇主、八卦前雇主、揭秘前雇主搏出位&#xff08;这条是恶行&#xff09;满足大众猎奇心理吹嘘自己&#xff0c;贬低他人…

重言式判别c语言中文网,重言式判别 重言式判别源码及课程设计 c语言版.doc

重言式判别 重言式判别源码及课程设计 c语言版重言式的判别 题目&#xff1a;一个逻辑表达式如果对于其変元的任一种取值都为真&#xff0c;则称为重言式&#xff1b;反之&#xff0c;如果对于其变元的任一种取值都为假&#xff0c;则称为矛盾式&#xff1b;然而&#xff0c;更…

redis灵魂拷问:19图+11题带你面试通关

又到了金三银四跳槽季&#xff0c;好多同学已经开始行动了。今天我来助力一把&#xff0c;送出这套redis面试题&#xff0c;助力大家通关。1 redis为什么响应快1.1数据保存在内存中redis数据保存在内存中&#xff0c;读写操作只要访问内存&#xff0c;不需要磁盘IO。1.2.底层数…

趣图:BAT程序员的一天对比

这是一张流传网络的BAT的一天对比图&#xff1a;你看懂了吗&#xff1f;数据与算法之美用数据解决不可能长按扫码关注

android view存储为jpg,Android长按imageview把图片保存到本地的实例代码

工具类之前用AsyncTask现在改用rxJavapublic class SaveImageUtils {public static void imageSave(final ImageView imageView, final int id) {Observable.create(new Observable.OnSubscribe() {Overridepublic void call(Subscriber super ImageView> sub) {sub.onNext(…

【配置文件】大家来谈谈这个log4j到底有什么用?

一直在WEB项目中添加log4j.properties文件&#xff0c;却不知道该怎么使用它&#xff0c;希望大家不吝赐教 写日志&#xff0c;还能干什么&#xff1f; log4j.properties 主要用于配置那些范围会采用日记的记录&#xff0c;以及日记的输出格式&#xff0c;采用什么设备输出&…

教你如何用Harbor 私有镜像仓库搭建

一、Harbor是什么&#xff1f; Docker有个形象的比喻叫集装箱&#xff0c;kubernetes是舵手&#xff0c;而Harbor是港湾&#xff0c;其实是用来保存容器镜像的仓库&#xff0c;企业使用docker、kubernetes时&#xff0c;一般都需要个私有镜像仓库的&#xff0c;Harbor就是其中的…

接好!畅销数学界的科普书,我们免费送!

感谢一直以来的关注与支持一直以来感谢大家对超级数学建模的关注与支持&#xff01;我们热爱数学&#xff0c;对于数学的可爱、魅力以及神秘&#xff0c;我们也与大家一起探索&#xff01;我们也热爱分享&#xff0c;把每一次的数学趣味、专业知识分享给大家&#xff01;此时此…

android 监听布局改变,Android通过监听最外层布局的改变监听键盘的状态,软键盘的弹出和收起都会改变外层布局(前提是把Activity的mode设置成压缩);...

最外层布局.addOnLayoutChangeListener(new OnLayoutChangeListener() {Overridepublic void onLayoutChange(View arg0, int arg1, int arg2, int arg3,int arg4, int arg5, int arg6, int arg7, int arg8) {// TODO Auto-generated method stubif(EditText.hasFocus()){/*** …

仿豆丁百度文库网页版阅读器完整解决方案

Java平台要实现类似豆丁百度文科的文档在线阅读&#xff0c;总体思路是讲doc docx等文件格式利用openoffice转换成pdf再用swftools转为swf。再用flexpaper组件显示swf。 此过程涉及软件(实测) openoffice3.2(window) swftools-2011-01-23-1815.exe(window) openoffice3.1.1(lin…

NET问答: 如何使用 C# 自动化关闭电脑 ?

咨询区 roomaroo&#xff1a;我查阅资料发现有一些可使用 C# 关闭用户电脑的方法&#xff0c;但我觉得都不是很简洁&#xff0c;所以我想在这里寻找一种简单或者使用原生 .NET 关闭的方式。回答区 Pop Catalin&#xff1a;很简单&#xff0c;直接用 C# 调用 cmd 执行 shutdown …