走进windows编程的世界-----入门篇
1 Windows编程基础
1.1Win32应用程序基本类型
1) 控制台程序
不须要完好的windows窗体,能够使用DOS窗体方式显示
2) Win32窗体程序
包括窗体的程序,能够通过窗体与程序进行交互
3) Win32库程序
提供已有的代码,供其它程序使用
动态库(DLL):是在运行的时候能够载入的。
静态库(LIB):是在编译链接是使用的程序。成为当前程序的一部分。
1.2头文件和库
1.2.1头文件
主要的头文件windows.h包括了windows经常使用的定义等,其它,还包括了一些其它的头文件。比方:
1、 windef.h: 定义个中数据类型
2、 winbase.h:定义了kernel的相关函数
3、 wingdi.h:定义了画图和文件
4、 winuser.h:窗体及空间
5、 winnt.h:提供了Unicode的支持
1.2.2库
1、Kernel32.lib :提供进程线程内存等等API函数定义
2、User32.lib :窗体及界面的API函数
3、Gdi32.lib :提供画图、文字等API函数支持
1.1.1实例helloworld
/*File : helloworld.cpp
*Auth : sjin
*Date : 20140519
*Mail : 413977243@qq.com
*/ #include <iostream>
#include <Windows.h> int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{ MessageBox(NULL,"hello world..","first win32 test",MB_OK);
return 0;
}
执行结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2ppbl8xMzE0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
1.1编写第一个窗体程序
处理相关的流程例如以下:
1、窗体入口函数WinMain
2、窗体处理函数
3、注冊窗体类型
4、创建窗体
5、显示窗体
6、消息处理
7、程序退出
看以下的代码:
/*File : helloworld.cpp
*Auth : sjin
*Date : 20140519
*Mail : 413977243@qq.com
*/ #include <iostream>
#include <Windows.h> using namespace std; HINSTANCE g_hInst = NULL; //2窗体处理函数
/*函数功能:该函数是一个应用程序定义的函数。 它处理发送给窗体的消息
* 当窗体处理消息消息时,系统调用该函数
*參数:
*hwnd:指向窗体的句柄。 *uMsg:指定消息类型。 *wParam:指定其余的、消息特定的信息。该參数的内容与UMsg參数值有关。
*IParam:指定其余的、消息特定的信息。该參数的内容与uMsg參数值有关。 */
LRESULT CALLBACK WndProc(HWND hwnd,/**/
UINT nMsg,
WPARAM wParam,
LPARAM IParam)
{
switch( nMsg ){
case WM_DESTROY://窗体销毁的消息
//发送消息退出函数
PostQuitMessage(0);
return 0; default:
break; } //调用
return DefWindowProc(hwnd,nMsg,wParam,IParam);
} //3注冊窗体类型
/*
*
*/
BOOL MyRegister( LPSTR pszClassName)
{
WNDCLASS wc = {'\0'}; wc.style = CS_VREDRAW | CS_HREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = g_hInst;
wc.hIcon = LoadIcon(g_hInst,MAKEINTRESOURCE(100));;
wc.hCursor = NULL;
wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE);
wc.lpszMenuName = NULL;
wc.lpszClassName = pszClassName; ATOM natom = RegisterClass(&wc); if(0 == natom){
MessageBox(NULL,"Register Failed","Error!",MB_OK | MB_ICONWARNING);
}else{
//MessageBox(NULL,"Register Successed","Successed!",MB_OK);
} return TRUE;
} //4 窗体创建 HWND myCreateWindow(LPSTR pszClassName)
{
//创建窗体
HWND hwnd =CreateWindow(pszClassName,
"HelloWnd",
WS_OVERLAPPEDWINDOW,
100,
100,
300,
500,
NULL,
NULL,
g_hInst,
NULL); if(0 == hwnd){
MessageBox(NULL,"CreateWindow Failed","Error!",MB_OK | MB_ICONWARNING);
}else{
//MessageBox(NULL,"CreateWindow Successed","Successed!",MB_OK);
} return hwnd;
} //5 显示窗体
void Displaywnd(HWND hwnd)
{
//显示
ShowWindow(hwnd,SW_SHOW); //刷新
UpdateWindow(hwnd);
} //6 消息处理 void Message()
{
MSG msg = {'\0'};
//消息循环处理。获取消息
while(GetMessage(&msg,NULL,0,0)){
//派发消息
DispatchMessage(&msg);/*会运行窗体处理函数*/
} } //1、入口函数
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{ g_hInst = hInstance; //注冊窗体类型
MyRegister("my first win32");
//常见注冊类型的窗体
HWND hwnd = myCreateWindow("my first win32");
//显示窗体
Displaywnd(hwnd);
//消息处理
Message(); return 0;
}
资源文件
/*File : helloworld.rc
*Auth : sjin
*Date : 20140519
*Mail : 413977243@qq.com
*/ 100 ICON "2222.ico"
图片例如以下:
走进windows编程的世界-----入门篇的更多相关文章
- 走进windows编程的世界-----windows进程
Windows进程 1 Windows进程 进程是一个容器,包括了一个应用程序实例的各种资源.Windows多任务的操作系统,因此能够同一时候运行多个进程. 2 Windows进程的 ...
- 走进windows编程的世界-----消息处理函数(1)
Win32消息机制 过程驱动:程序是依照我们预先定义好的顺序运行.每运行一步,下一步都已经依照预定的顺序 继续运行,直至程序结束. 事件驱动:程序的运行顺序是无序的.某个时间点所运行的 ...
- 走进windows编程的世界-----消息处理函数(3)
二 定时器消息 1 定时器消息 WM_TIMER 依照定时器设置时间段,自己主动向窗体发送一个定时器消息WM_TIMER. 优先级比較低. 定时器精度比較低,毫秒级别.消息产生时间也精度比較低 ...
- 走进windows编程的世界-----画图相关
Windows画图 1 图形绘制 1.1 图形绘制的方式 获取到画图句柄-设备描写叙述表(DC),使用对应的画图的API,在设备上绘制图形. 1.2 颜色 ...
- 走进windows编程的世界-----消息处理函数(2)
一 WM_PAINT消息 1 WM_PAINT的产生 因为窗体的互相覆盖等,产生须要绘制的区域,那么会产生WM_PAINT消息. 普通情况下,不直接发送WM_PAINT消息,通过API声明须要 ...
- 走进windows编程的世界-----对话框、文本框、button
1 对话框的分类 2 对话框的基本使用方式 3 对话框资源 4 有模式对话框的使用 int DialogBox( HINSTANCE hInstance, LPCTSTR lpTemplate, ...
- 走进windows编程的世界-----窗体的注冊及创建
1 窗体注冊和创建 1.1WIN32 窗体程序创建步骤 1.WinMain入口函数的定义 2.WindowProc函数的定义 3.注冊窗体类 RegisterClass.RegisterClass ...
- [C#] 走进异步编程的世界 - 在 GUI 中执行异步操作
走进异步编程的世界 - 在 GUI 中执行异步操作 [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5877042.html 序 这是继<开始接 ...
- 走进异步编程的世界 - 在 GUI 中执行异步操作
转载:https://www.cnblogs.com/liqingwen/p/5877042.html 走进异步编程的世界 - 在 GUI 中执行异步操作 [博主]反骨仔 [原文地址]http://w ...
随机推荐
- 分布式公布订阅消息系统 Kafka 架构设计
我们为什么要搭建该系统 Kafka是一个消息系统,原本开发自LinkedIn,用作LinkedIn的活动流(activity stream)和运营数据处理管道(pipeline)的基础. 如今它已为多 ...
- 【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放具体解释
本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行解说,主要通过MFC单文档视图实现显示BMP图片空间几何变换.包含图像平移.图形 ...
- hdu2476String painter (区间DP)
Problem Description There are two strings A and B with equal length. Both strings are made up of low ...
- 关于vue 自定义组件的写法与用法
最近在网上看到很多大神都有写博客的习惯,坚持写博客不但可以为自己的平时的学习做好记录积累 无意之中也学还能帮助到一些其他的朋友所以今天我也注册一个账号记录一下学习的点滴!当然本人能力实在有限写出的文章 ...
- 【转】iOS多语言本地化(国际化)设置
原文网址:http://www.jianshu.com/p/2b7743ae9c90 讨论的iOS应用中的多语言设置,Ok 一般是两种情况: 1.根据当前设备语言自动切换显示 2.在应用中可进行语言设 ...
- oracle (9I/10G/11G)数据库日志挖掘(审计误操作)
文档结构: 资料来自官方网站: https://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm#SUTIL019 来自论坛: h ...
- Android Studio 一些注意事项(自用,不定期更新)
1,Android Studio 版本的选择 写这篇的时候,官方版本已经到了 v3.2.0,而我习惯使用的版本是 v2.3.1,因为这个版本有自带sdk的安装版,比较方便, 同时,v2.3.1 新建项 ...
- Java 系列之spring学习--springmvc注解参数传递(六)
一.绑定参数注解如下 @RequestParam 绑定单个请求数据,既可以是URL中的参数,也可以是表单提交的参数或上传的文件. 它有三个属性: value 用于设置参数名. defa ...
- VSCode (Code) 技法
本人使用插件推荐 indent-rainbow https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow B ...
- canvas实现刮刮卡效果
canvas实现刮刮卡效果 实现步骤: 设置页面背景图,即刮刮卡底部图片 绘制canvas 刮刮卡顶部图片drawImage 绑定事件 addEventListener touchstart.tou ...