01 Windows编程——Hello World
源码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include "stdafx.h" #include<Windows.h> int WINAPI WinMain(HINSTANCE hInst,HINSTANCE tmp,LPSTR strCmd,int nShow) { MessageBox(NULL, "Hello World!", "Title", 0); }
1 int MessageBox( 2 HWND hWnd, 3 LPCTSTR lpText, 4 LPCTSTR lpCaption, 5 UINT uType 6 );
hWnd:指向message box 的 owner window的句柄,如果为NULL,表明没有owner window,他的owner window就是桌面
lpText:要显示消息的内容
lpCaption:message box的标题,如果为NULL,则显示为默认值 Error
uType:指定一个决定对话框的内容和行为的位标志集。
报 类型参数不匹配 bug
原因是字符集设置有问题,改成ASCII
修改后不再报 类型参数不匹配,build一下,build失败
原因是入口函数没有设置正确。WIndows窗体程序的入口函数是WinMain。控制台程序的入口函数是main。
修改如下
此时可以正常运行
代码讲解
Winddows窗体程序的入口函数是WinMain,这个函数定义如下
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
int CALLBACK WinMain( _In_ HINSTANCE hInstance, _In_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow );
HINSTANCE这个类型是我们没见过的。F12逐层查看定义如下。##是连字符
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
DECLARE_HANDLE(HINSTANCE); DECLARE_HANDLE(name) struct name##__{ int unused; }; typedef struct name##__ *name
宏展开后代码如下。可见HINSTANCE是一个指向结构体的指针。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
struct hinstance__ { int unused; }; typedef struct hinstance__ *hinstance;
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE tmp,LPSTR strCmd,int nShow)
HINSTANCE:执行当前应用程序实力的句柄
hInst:该应用程序的基地址,指向当前程序实例的句柄
tmp:这个值现在一直为NULL
strCmd:除了命令名,命令后面的参数
nShow:控制窗口如何被显示
打印内存基地址源码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include "stdafx.h" #include<Windows.h> #include <stdio.h> int WINAPI WinMain(HINSTANCE hInst,HINSTANCE tmp,LPSTR strCmd,int nShow) { char str[100]; sprintf(str,"0x%x",hInst); MessageBox(NULL, str, "内存基地址", 0); }
默认情况下VS 2017开启的是随机基地址,可以在属性->连接器->高级 下边设置
属性->连接器->高级->入口点
Windows窗体程序默认的入口点是WInMain,当让我们也可以修改成其他的字符
build一下,报错,还需要设置子系统
几乎所有的Windows窗体应用程序都需要包含 #include<Windows.h>
Windows.h是一个最重要的包含文件,它囊括了若干其他Windows头文件,其中的某些头文件又包含另外的一些头文件。下列几个是最重要也是最基本的头文件:
#include <windef.h> 基本数据类型定义。
#include <winbase.h> 内核函数。
#include <wingdi.h> 图形设备接口函数。
#include <winuser.h> 用户界面函数。
相关文章
- 解决jupyter以及windows系统中pycharm编译器画图的中文乱码问题大全
- 【Qt开发】Qt在Windows下的三种编程环境搭建
- CS0016: 未能写入输出文件“c:WINDOWSMicrosoft.NETFramework.。。”--“拒绝访问
- mac系统安装搭载Windows系统虚拟机方法教程
- C++内存管理4-Windows编程中的堆管理(转)
- 黑客59万售卖Windows最新零日漏洞
- [置顶] 《Windows编程零基础》__2 一个完整的程序
- Windows服务器故障转移集群的仲裁
- 走进windows编程的世界-----消息处理函数(2)
- Windows Server:DHCP 服务:一点总结
- Using a Microsoft Account to Logon and Resulting Internet Communication in Windows 8
- windows访问linux虚拟机文件
- 我的Windows系统
- 批处理将字符串输出到Windows剪贴板
- Windows pytesseract image_to_osd Invalid resolution 0 dpi. Using 70 instead. Too few characters报错及解决
- 购买阿里云服务器时linux和windows操作系统如何选择
- windows下git库的ssh连接,使用public key的方法
- windows编程之菜单操作
- Win32 Windows编程 十
- python编程( 第一份Windows平台运行的python代码)
- 随想录(windows和linux进行socket通信)
- 【Windows】windows核心编程整理(下)
- 【Windows】windows核心编程整理(上)
- windows下如何添加、删除和修改静态路由
- WINDOWS 2008 采用IP策略解决445,139等病毒攻击问题
- Python中的CGI编程 config配置(windows、Apache) 以及后期的编写(转)
- [Windows编程] 使用AttachThreadInput 来捕捉其它窗口的键盘输入
- 《windows核心编程系列》二谈谈ANSI和Unicode字符集 .
- Windows Socket 编程_ 简单的服务器/客户端程序 .
- 【并发编程四】windows进程通信和Linux进程通信
- windows下网络丢包模拟软件(Network Emulator for Windows Toolkit)
- 使用cwRsync实现windows下文件定时同步
- C++windows内核编程笔记day11 win32静态库和动态库的使用
- C++windows内核编程笔记day03_day04_day05