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)、显示及更新窗口。
}
#include<stdio.h>
#include<string.h>
#include<windows.h> /*声明winSunProc*/
LRESULT CALLBACK WinSunProc( HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter);
);
int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state);
)
{
WNDCLASS wndclass;
/*声明定义什么的*/
wndclass.cbClsExtra = NULL;
wndclass.cbWndExtra = NULL;
wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon = LoadIcon(NULL,IDI_ERROR);
wndclass.hInstance = hInstance;
wndclass.lpfnWndProc = WinSunProc ;
wndclass.lpszClassName = "Gxjun";
wndclass.lpszMenuName =NULL;
wndclass.style= CS_HREDRAW|CS_VREDRAW ;
RegisterClass(&wndclass); //注册窗口函数
HWND hwnd;
hwnd = CreateWindow("Gxjun","龚细军的第一个窗口程序",WS_OVERLAPPEDWINDOW,,,,,NULL,NULL,hInstance,NULL); /*创建窗口*/
ShowWindow(hwnd,SW_SHOWNORMAL); /*显示窗口*/
UpdateWindow(hwnd);
MSG msg;
while(GetMessage(&msg,NULL,,))
{
TranslateMessage(&msg); /*该函数将虚拟键消息转换为字符消息*/ DispatchMessage(&msg); /*该函数分发一个消息给窗口程序。通常消息从GetMessage函数获得。
消息被分发到回调函数(过程函数),作用是消息传递给操作系统,
然后操作系统去调用我们的回调函数,也就是说我们在窗体的过程函
数中处理消息*/
} return ;
}
LRESULT CALLBACK WinSunProc( HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter);
)
{ switch(uMsg)
{
case WM_CHAR:
char str[];
sprintf(str,"char is %d",wParam);
MessageBox(hwnd,str,"Gxjun",);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"mouse clicked","Gxjun",);
HDC hdc;
/*PAINTSTRUCT ps;*/
hdc=GetDC(hwnd);
TextOut(hdc,,,"我是胡萝卜头,呼叫北极站",strlen("我是胡萝卜头,呼叫北极站"));
ReleaseDC(hwnd,hdc); /*函数释放设备上下文环境(DC)供其他应用程序使用。*/
break;
case WM_PAINT:
HDC hdc_1;
PAINTSTRUCT paints;
hdc_1 = BeginPaint(hwnd,&paints);
TextOut(hdc_1,,,"我是长城好哇",strlen("我是长城好哇"));
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"哇哈哈,你丫的真的打算关掉吗?","卖萌之家",MB_YESNO)) {
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage();
break;
default:
return DefWindowProc(hwnd,uMsg,wParam, lParam);
}
return ;
}
效果图:
MFC学习之窗口基础的更多相关文章
- MFC学习 修改窗口样式
1. 在PreCreateWindow中可用CREATESTRUCT cs, cs.lpszName修改窗口标题, cs.lpszClass = AfxRegisterWndClass 修改图标与样式 ...
- 学习:简单使用MFC创建对话框窗口
MFC介绍:微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows ...
- MFC学习笔记1---准备工作
什么是MFC MFC,全称Microsoft Foundation Classes,微软基础类库,顾名思义,是微软的攻城狮们将一些常用的基础的Windows API 函数用C++的形式封装成类,简化程 ...
- MFC 学习笔记
MFC 学习笔记 一.MFC编程基础: 概述: 常用头文件: MFC控制台程序: MFC库程序: 规则库可以被各种程序所调用,扩展库只能被MFC程序调用. MFC窗口程序: 示例: MFC库中类的简介 ...
- 大数据学习之Linux基础01
大数据学习之Linux基础 01:Linux简介 linux是一种自由和开放源代码的类UNIX操作系统.该操作系统的内核由林纳斯·托瓦兹 在1991年10月5日首次发布.,在加上用户空间的应用程序之后 ...
- Python学习总结之一 -- 基础篇
Python学习第一篇 一:写在前面 啊,最近我的新博客一直都没有更新学习内容了,只是最近一直都在忙着寻找实习机会(或许这只是一个借口,真实原因是我太懒惰了,改改改!).终于今天又投递了几个新的实习职 ...
- Python学习day16-模块基础
<!doctype html>day16 - 博客 figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { ...
- 这几天开始,先学习一些 java 基础吧,学的有点累
这几天开始,先学习一些 java 基础吧,学的有点累
- MFC学习笔记
获取窗口句柄 FindWindow 根据窗口名获取 GetSafehWnd 取你程序所在窗口类的句柄 GetActiveWindow ...
随机推荐
- CPU的一些参数和排名
排名的信息来源: http://itianti.sinaapp.com/index.php/cpu 一些参数的信息来源: http://ark.intel.com/ 个人关注一些的一些CPU排名: I ...
- 关于STM32库中 __IO 修饰符(volatile修饰符,反复无常的意思)
STM32例子代码中会有像这样的代码 static __IO uint32_t TimingDelay; 这里边的__IO修饰符不好理解,单从字面可以看出是为IO相关,查其标准库可以得知这个__IO ...
- C#控制台->>四则运算
用户需求: 要求编写一个0-10之间的整数进行四则运算,程序能接收输入的整数答案,并判断对错,程序结束时,统计出答对.答错的题目数量!并且0-10的整数是随机生成的,用户可以用键盘输入来选择四则运算中 ...
- git学习笔记09-bug分支-自己的分支改到一半了-要去改bug怎么办?
当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交: 并不是你不想提交,而是工作只进行到一半,还没法 ...
- eclipse svn 忽略 target目录 等等... 我用的后边的方法 (转载)
这个build失败的解决方案就是不要把你项目的 target目录放在src repository 里面,还有 .project 和 .classpath 最好也别放到src repository 里. ...
- vector的插入、lower_bound、upper_bound、equal_range实例
对于这几个函数的一些实例以便于理解: #include <cstdlib> #include <cstdio> #include <cstring> #includ ...
- JS trim()方法使用
JS trim()方法使用上有浏览器限制: 1.直接使用 string.trim() 浏览器版本限制:JavaScript Version 1.8 2.间接使用<即自己使用正则构造类trim的 ...
- JSON入门实例
json和XML很像,但它具有更快,更小,阅读性强等优点.不多说,直接来例子: <html><body><h2>通过 JSON 字符串来创建对象</h3> ...
- DDL和DML的定义和区别
DML(Data Manipulation Language)数据操纵语言: 适用范围:对数据库中的数据进行一些简单操作,如insert,delete,update,select等. DDL(Data ...
- 关于level DB的相关资料
可以参考: http://blog.csdn.net/houzengjiang/article/details/7718548 http://www.cnblogs.com/haippy/archiv ...