MFCウィンドウ、メッセージマッピングメカニズム、Windows文字セットの作成

Windows文字セット
英語、1文字は1バイトに対応、マルチバイト
中国語、1文字は複数バイトに対応、ワイドバイト、Unicode、utf-8 3、GBK 2
スキーム右クリック-プロパティ-一般-文字セット、文字を確認現在のプロジェクトで使用されるセット
MessageBox(L "aaa"); // Lは、マルチバイトの拡張バイト
TEXT、アダプティブエンコーディング変換、エンコーディングを現在のプロジェクトで使用される
エンコーディングに変換するTCHAR、アダプティブエンコーディング変換を表します。

OnDrawがある場合は、OnPaintはもうありません。同時に存在する場合、OnPaintはOnDrawを上書きします。MFCで
Exという名前のサフィックスが付いた関数は、すべて
MFCの拡張関数です。Afxで始まる関数はすべてグローバル関数です。プログラムのどの部分でも使用できます。電話をかける

mfc.h

#include <afxwin.h>//mfc使用的头文件

//CWinApp应用程序类
class MyApp:public CWinApp 
{
    
    
public:
	virtual BOOL InitInstance();//程序入口(没有main和winmain)
};
//窗口框架类
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;//保存指向应用程序的主窗口的指针,CWinThread
	return TRUE; //返回正常的初始化
}

//分界宏
BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)
	ON_WM_LBUTTONDOWN()//鼠标左键按下
	ON_WM_CHAR()//键盘
	ON_WM_PAINT()//绘图
END_MESSAGE_MAP()

MyFrame::MyFrame()
{
    
    
	Create(NULL, TEXT("mfc"));
}

//鼠标按下
void MyFrame::OnLButtonDown(UINT, CPoint point)
{
    
    
	//TCHAR buf[1024];//TCHAR:MFC中的字符数组
	//wsprintf(buf, TEXT("x=%d,y=%d"), point.x, point.y);
	//MessageBox(buf);

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

//键盘按下
void MyFrame::OnChar(UINT key, UINT, UINT)
{
    
    
	CString str;
	str.Format(TEXT("按下了%c键"), key);

	MessageBox(str);
}

//绘图
void MyFrame::OnPaint()
{
    
    
	CPaintDC dc(this);//类似QT中的画家,this代表绘图设备;在父类CDC中找能画的图形

	dc.TextOutW(100, 100, TEXT("为了部落"));

	//画椭圆
	dc.Ellipse(10, 10, 100, 100);//两个坐标组成矩形,画矩形内切圆

	//统计字符串长度
	int num = 0;
	char * p = "aaaaaa";
	num = strlen(p);

	//统计宽字节的字符串长度
	wchar_t * p2 = L"bbbbb";//声明宽字节字符串
	num = wcslen(p2);

	//char *与CString之间的转换
	//char*转CStirng
	char *p3 = "ccc";
	CString str = CString(p3);

	//CString转char*
	CStringA tmp;
	tmp = str;
	char * pp = tmp.GetBuffer();
}

おすすめ

転載: blog.csdn.net/weixin_40355471/article/details/108602906
おすすめ