走进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 ...
随机推荐
- js代码从页面移植到文件里失效或js代码改动后不起作用的解决的方法
近期在做关于站点的项目,总是发生这种问题 写的javascript代码在页面上没有问题,可是将js代码移植到.js的文件里,在页面上进行调用,总是出现失效等错误 另外改动后的js代码,又一次刷新网页仍 ...
- validate命令---rman进行备份和回复的验证
rman作为oracle备份与恢复工具,为我们提供了强大的功能.当中包含对数据文件的物理和逻辑检測以及备份文件的有效性检測. 首先.来看一下rman对数据文件的检測. 我们知道,rman在备份数据时, ...
- Autodesk 举办的 Revit 2015 二次开发速成( 1.5 天),教室培训, 地点武汉
2014年8月26日9:00 – 17:00 2014年8月27日9:00 – 12:00 培训地点: Ø 湖北工业大学 实训楼605教室 Ø 地址:武汉市武昌区南湖李家墩一村一号 Ø 交通路线说明: ...
- uninstall OpenJDK9
sudo apt--jre openjdk--jdk ///要慎用auto命令,会把所有的软件包删掉 https://www.linuxidc.com/Linux/2017-11/148941.htm ...
- APNs推送
消息推送是可以指定声音的.譬如你可以对正面的反馈使用欢快的声音,对负面的反馈使用低沉一点的声音,都可以达到别出心裁让人眼前一亮的目的.你需要先放一些aiff.wav或者caf音频文件到app的资源文件 ...
- maven、spring jdbc与mysql、mybatis
以它们之前的一个简单用例作为实例. 一个简单的能跑起来的实例.原文网址.非常好的例子. http://www.open-open.com/lib/view/open1390534380648.html ...
- Centos下MongoDB数据库的安装以及配置开机自启动(三)
最近写了一个用node来操作MongoDB完成增.删.改.查.排序.分页功能的示例,并且已经放在了服务器上地址:http://39.105.32.180:3333. 在服务器上完全可以用yum来安装管 ...
- Java 系列之spring学习--springmvc搭建(四)
一.建立java web 项目 二.添加jar包 spring jar包下载地址http://repo.spring.io/release/org/springframework/spring/ 2. ...
- 从EntityFramework转换EntityFrameworkCore的正确姿势(DBFirst)
今天有一个小任务:要把一个数据的数据搬运到另一个数据库(两个数据库的数据结构很不一样). 决定用.net core console app来跑,并且采用entityframework 去做数据CRU ...
- 【原创】java的反射机制
什么是java的反射?java在运行期间可以动态的加载.解析和使用一些在编译阶段并不确定的类型,这一机制被称作反射.它可以加载只有运行时才能确定的数据类型,解析类的内部结构,获取其基本信息,如方法.属 ...