MFC学习之窗口基础
时间:2022-05-05
本文章向大家介绍MFC学习之窗口基础,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
WinMain函数
1、句柄(HANDLE):{
1. 定义:资源的标识
2. 句柄的作用: 操作系统通过句柄来找到对应的资源,从而对这些资源进行管理和操作。
3句柄的分类:(按资源){
1.图标句柄(HICON) ,
2.光标句柄(HCURSOR) ,
3. 窗口句柄(HWND) ,
4.应用程序实列句柄(HINSTANCE).
}
}
2、Windows应用程序,操作系统,计算机硬件之间的相互关系
Windows程序的入口函数:
窗口应用程序入口:
Int WINAPI WinMain(
HINSTANCE hinstance ; // 应用程序实列句柄
HINSTANCE hPrevInstance ; // 基本都设置为0
LPSTR ipCmdLine ; /commandLLine LPSTRLP(long point 长指针)
int nCmdSbow ; //显示状态
)
3、 窗口的创建:
大致来说,如果要创建一个完整的窗口需要经过下面四个操作步骤:{
(1)、设计一个窗口类;
(2)、 注册窗口类 ;
(3)、创建窗口;
(4)、显示及更新窗口。
}
1 #include<stdio.h>
2 #include<string.h>
3 #include<windows.h>
4
5 /*声明winSunProc*/
6 LRESULT CALLBACK WinSunProc( HWND hwnd, // handle to window
7 UINT uMsg, // message identifier
8 WPARAM wParam, // first message parameter
9 LPARAM lParam // second message parameter);
10 );
11 int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance
12 HINSTANCE hPrevInstance, // handle to previous instance
13 LPSTR lpCmdLine, // command line
14 int nCmdShow // show state);
15 )
16 {
17 WNDCLASS wndclass;
18 /*声明定义什么的*/
19 wndclass.cbClsExtra = NULL;
20 wndclass.cbWndExtra = NULL;
21 wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
22 wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
23 wndclass.hIcon = LoadIcon(NULL,IDI_ERROR);
24 wndclass.hInstance = hInstance;
25 wndclass.lpfnWndProc = WinSunProc ;
26 wndclass.lpszClassName = "Gxjun";
27 wndclass.lpszMenuName =NULL;
28 wndclass.style= CS_HREDRAW|CS_VREDRAW ;
29 RegisterClass(&wndclass); //注册窗口函数
30 HWND hwnd;
31 hwnd = CreateWindow("Gxjun","龚细军的第一个窗口程序",WS_OVERLAPPEDWINDOW,0,0,400,600,NULL,NULL,hInstance,NULL); /*创建窗口*/
32 ShowWindow(hwnd,SW_SHOWNORMAL); /*显示窗口*/
33 UpdateWindow(hwnd);
34 MSG msg;
35 while(GetMessage(&msg,NULL,0,0))
36 {
37 TranslateMessage(&msg); /*该函数将虚拟键消息转换为字符消息*/
38
39 DispatchMessage(&msg); /*该函数分发一个消息给窗口程序。通常消息从GetMessage函数获得。
40 消息被分发到回调函数(过程函数),作用是消息传递给操作系统,
41 然后操作系统去调用我们的回调函数,也就是说我们在窗体的过程函
42 数中处理消息*/
43 }
44
45 return 0;
46 }
47 LRESULT CALLBACK WinSunProc( HWND hwnd, // handle to window
48 UINT uMsg, // message identifier
49 WPARAM wParam, // first message parameter
50 LPARAM lParam // second message parameter);
51 )
52 {
53
54 switch(uMsg)
55 {
56 case WM_CHAR:
57 char str[26];
58 sprintf(str,"char is %d",wParam);
59 MessageBox(hwnd,str,"Gxjun",0);
60 break;
61 case WM_LBUTTONDOWN:
62 MessageBox(hwnd,"mouse clicked","Gxjun",0);
63 HDC hdc;
64 /*PAINTSTRUCT ps;*/
65 hdc=GetDC(hwnd);
66 TextOut(hdc,200,400,"我是胡萝卜头,呼叫北极站",strlen("我是胡萝卜头,呼叫北极站"));
67 ReleaseDC(hwnd,hdc); /*函数释放设备上下文环境(DC)供其他应用程序使用。*/
68 break;
69 case WM_PAINT:
70 HDC hdc_1;
71 PAINTSTRUCT paints;
72 hdc_1 = BeginPaint(hwnd,&paints);
73 TextOut(hdc_1,0,0,"我是长城好哇",strlen("我是长城好哇"));
74 break;
75 case WM_CLOSE:
76 if(IDYES==MessageBox(hwnd,"哇哈哈,你丫的真的打算关掉吗?","卖萌之家",MB_YESNO)) {
77 DestroyWindow(hwnd);
78 }
79 break;
80 case WM_DESTROY:
81 PostQuitMessage(0);
82 break;
83 default:
84 return DefWindowProc(hwnd,uMsg,wParam, lParam);
85 }
86 return 0;
87 }
效果图:
- Git基础命令使用(个人总结)
- Centos搭建Docker环境
- Consul Config 使用Git做版本控制的实现
- 让XP支持4G内存
- Consul微服务的配置中心体验篇
- 如何使用Sentry实现Hive/Impala的数据脱敏
- 如何使用Oozie API接口向Kerberos环境的CDH集群提交Shell作业
- Docker下redis的主从、持久化配置
- vuejs、eggjs、mqtt全栈式开发设备管理系统
- Xss和Csrf介绍
- GraphQL介绍&使用nestjs构建GraphQL查询服务
- 使用auth_request模块实现nginx端鉴权控制
- Docker学习之Docker镜像基本使用
- Docker学习之Centos7下安装
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 仿抖音短视频APP源码,实现简单的换头像并保存
- php实现JWT(json web token)鉴权实例详解
- laravel实现上传图片,并且制作缩略图,按照日期存放的代码
- 在Laravel中使用MongoDB的方法示例
- 基于thinkphp6.0的success、error实现方法
- Yii框架模拟组件调用注入示例
- 解决laravel 表单提交-POST 异常的问题
- laravel5.0在linux下解决.htaccess无效和去除index.php的问题
- laravel返回统一格式错误码问题
- 使用 PHP Masked Package 屏蔽敏感数据的实现方法
- PHP简单实现图片格式转换(jpg转png,gif转png等)
- 在thinkphp5.0路径中实现去除index.php的方式
- Laravel5.5 手动分页和自定义分页样式的简单实现
- laravel自定义分页的实现案例offset()和limit()
- Laravel6.0.4中将添加计划任务事件的方法步骤