MFC初体验

本文详细介绍了如何使用MFC创建一个空窗口,包括应用程序类的定义、InitInstance()函数的实现以及消息映射机制的应用。通过示例展示了鼠标、键盘和绘图消息的处理,并探讨了字符集的概念。同时,给出了窗口框架类的定义和消息响应函数的实现,如OnLButtonDown()、OnChar()和OnPaint(),以及宽字节和多字节字符集的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内容概述

mfc实现一个空窗口:
    1、头文件#include<afxwin.h>
    2、应用程序类MyApp继承CWinApp,有且仅有一个应用程序对象
    3、入口函数(应用程序类的成员函数)InitInstance()
        1)创建窗口 
        2)窗口显示和更新,保存主窗口指针

mfc的事件处理:消息映射机制
    1、在.h中声明 声明宏 DECLARE_MESSAGE_MAP()
    2、在.cpp中分界宏 
        1)BEGIN_MESSAGE_MAP(当前窗口类,窗口类父类)
        2)END_MESSAGE_MAP()
    鼠标消息 键盘消息 绘图消息

window字符集
    ANSI(多字节) 1个字符对应 1个字节
    中文 韩文... 宽字节  1个字符对应多个字节 unicode  UTF-8 3个字节  gbk 2个字节

mfc.h

#pragma once
#include <afxwin.h>  //MFC需要包含的头文件

class MyApp : public CWinApp //应用程序类
{
public:
	//MFC程序入口
	virtual BOOL InitInstance();

};

//窗口框架类
class MyFrame :public CFrameWnd
{
public:
	MyFrame();

	//使用消息映射机制 必须引用声明宏
	DECLARE_MESSAGE_MAP()

	afx_msg void OnLButtonDown(UINT, CPoint);//鼠标左键按下声明
	afx_msg void OnChar(UINT, UINT, UINT);  //键盘函数声明
	afx_msg void OnPaint();//绘图实现
};

mfc.cpp

#include "mfc.h"

MyApp app;//应用程序的对象,有且仅有一个

BOOL MyApp::InitInstance()  //入口函数
{
	//创建窗口
	MyFrame *frame = new MyFrame;

	//显示和更新
	frame->ShowWindow(SW_SHOWNORMAL);
	frame->UpdateWindow();

	m_pMainWnd = frame;//保存指向应用程序主窗口的指针

	return true;//返回正常初始化
}

//消息映射的分界宏
BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)
	ON_WM_LBUTTONDOWN() //鼠标左键按下
	ON_WM_CHAR()  //键盘宏
	ON_WM_PAINT()

END_MESSAGE_MAP()

void MyFrame::OnLButtonDown(UINT, CPoint point)
{
	TCHAR buf[1024];
	wsprintf(buf,TEXT("X = %d,y = %d"),point.x,point.y);
	MessageBox(buf);

	CString str;
	//格式化字符串
	str.Format(TEXT(":::x = %d,y = %d"),point.x,point.y);
	MessageBox(str);
}

void MyFrame::OnChar(UINT key, UINT, UINT)
{
	/*TCHAR buff[1024];
	wsprintf(buff,TEXT("按下了%c"),key);
	MessageBox(buff);*/

	CString str;
	str.Format(TEXT("按下了%c"),key);
	MessageBox(str);
}

void MyFrame::OnPaint()
{
	CPaintDC dc(this);//画到当前窗口中
	//画文字
	dc.TextOutW(100,100,TEXT("朱德建"));

	//画椭圆
	dc.Ellipse(10, 10, 100, 100);

	//多字节转宽字节
	MessageBox(L("aaa"));

	//统计宽字节字符串程度
	const wchar_t *p = L"BBB";
	int n = wcslen(p);

	//类型相互转换
	//string -- char*   .c_str()
	//CString -- char*  
		//char* --> CString 
	const char* p2 = "aa";
	CString str = CString(p2);
		//CString -->char*
	CString str2 = TEXT("abc");
	CStringA tmp;
	tmp = str2;
	char* pp = tmp.GetBuffer();


}

//窗口框架的默认构造函数
MyFrame::MyFrame()
{
	Create(NULL,TEXT("mfc window"));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coder_Alger

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值