MFCWindows

1、初识

#include<Windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR IpCmdLine, int nCmdShow)
{
	int n=MessageBox(NULL, L"Helloworld", L"提示", MB_YESNOCANCEL | MB_ICONEXCLAMATION);
	if (n == IDOK)
	{
		MessageBox(NULL, L"点了OK", L"提示", MB_OK);
	}
	else if(n==IDNO){
		MessageBox(NULL, L"点了No", L"提示", MB_OK);
	}
	else{
		MessageBox(NULL, L"点了取消", L"提示", MB_OK);
	}

	return 0;
}

控制台窗口应用程序入口函数 main
窗口程序的入口函数 WinMain
函数调用约定:1、函数的入栈方式,2、由谁来平衡堆栈;此成员实际上不是调用约定,而是使用了默认平台调用约定。 例如,在 Windows x86 上默认为 StdCall,在 Linux x86 上默认为 Cdecl。
WINAPI/CALLBACK (本质:__stdcall:调用方式): 约定从右向左入栈
WINAPIV :__cdecl:约定从右向左入栈

HINSTANCE:应用程序实例句柄(结构体指针)hInstance:当前应用程序实例句柄,
hPreInstance:当前程序的前一个实例句柄,在32、64已经废弃了,不使用时为NULL,在16位机器上使用。
LPSTR :char*  LPCTSTR: const char*; IpCmdLine:命令行参数  
nCmdShow:窗口的显示方式:最大化,最下化,普通,正常显示

int MessageBox(
  [in, optional] HWND    hWnd,
  [in, optional] LPCTSTR lpText,
  [in, optional] LPCTSTR lpCaption,
  [in]           UINT    uType
);
    第一个,HWND :窗口句柄类型,没有父亲传NULL
    第二个,LPCTSTR:const wchar_t* ,宽字符集;内容
    第三个,标题
    第四个,按钮和图标的组合,不能按钮和按钮,图标和图标的组合

API :应用程序编程接口(Application Programma Interface)

SDK 软件开发包(Software Development Kit)
包含,API函数库,帮助手册,辅助工具,使用文档

窗口 包含标题栏,菜单栏,最小、最大化框,滚动
分为客户区和非客户区

句柄,标志一种资源
如窗口句柄,按钮句柄,消息句柄,菜单句柄,进程句柄,线程句柄,光标句柄

如果建立win32控制台应用程序,无法运行程序,点属性->连接器->系统->子系统->改成窗口。

2、创建窗口

1、设计窗口类 WNDCLASS wc;

2、注册窗口类 RegisterClass(&wc)

3、创建窗口类 HWND hWnd = CreateWindow();

4、显示窗口  ShowWindow(hWnd, SW_SHOW);

4、更新窗口 UpdateWindow(hWnd);

5、消息循环 MSG msg;

#include"resource.h"
#include<Windows.h>
//窗口处理函数
//LRESULT =long
//第一个 HWND 窗口句柄 
//第二个 消息编号
//WPARAM  窗口的附加消息  unsigned int
//LPARAM  窗口的附加消息  long int
LRESULT CALLBACK WindowsProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
	//1设计窗口类
	/*
	typedef struct tagWNDCLASSW {
	UINT        style;
	WNDPROC     lpfnWndProc;
	int         cbClsExtra;
	int         cbWndExtra;
	HINSTANCE   hInstance;
	HICON       hIcon;
	HCURSOR     hCursor;
	HBRUSH      hbrBackground;
	LPCWSTR     lpszMenuName;
	LPCWSTR     lpszClassName;
	} WNDCLASSW, *PWNDCLASSW, NEAR *NPWNDCLASSW, FAR *LPWNDCLASSW;
	*/
	wchar_t name[] = L"第一次";
	wchar_t windowsname[] = L"helloworld";
	WNDCLASS wc;
	wc.style = CS_HREDRAW | CS_VREDRAW;//窗口类的风格
	wc.lpfnWndProc = WindowsProc;//窗口处理函数
	wc.cbClsExtra = 0;//窗口类的额外扩展空间大小(字节)
	wc.cbWndExtra = 0;//窗口的额外扩展空间大小(字节)
	wc.hInstance = hInstance;//当前应用程序实例句柄
	//加载一个图标文件
	//第一个参数,应用程序实例句柄,如果是系统资源传NULL,自定义传hInstance
	//第二个:资源ID
	wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MAIN));//窗口图标实例句柄,NULL没有图标
	wc.hCursor = LoadCursor(NULL,IDC_ARROW);//鼠标图标句柄
	wc.hbrBackground = CreateSolidBrush(RGB(255, 97, 176));//背景画刷句柄
	wc.lpszMenuName = NULL;//菜单名
	wc.lpszClassName = name;//窗口类型名

	//2、注册窗口类
	//ATOM = WORD =unsigned short
	//DWORD = unsigned long
	if (0 == RegisterClass(&wc))
	{
		MessageBox(NULL, L"此程序不能再windows NT上运行", L"提示", MB_OK);
		return 0;
	}

	//3、创建窗口
	HWND hWnd = CreateWindow(
		name,//窗口类型名
		windowsname,//窗口标题
		WS_CAPTION | WS_SYSMENU | WS_MAXIMIZEBOX | WS_MINIMIZEBOX,//窗口风格
		200, 300, 600, 600,//窗口位置
		NULL,//父窗口句柄
		NULL,//菜单句柄
		hInstance,//应用程序实例句柄
		NULL,//创建窗口需要传递的信息
		);
	if (hWnd == NULL)
	{
		MessageBox(NULL, L"创建窗口失败", L"提示", MB_OK);
		return 0;
	}

	//4、显示窗口
	ShowWindow(hWnd, SW_SHOW);

	//5、更新窗口
	UpdateWindow(hWnd);

	//6、消息循环
	/*
	typedef struct tagMSG {
    HWND        hwnd;//信息发给哪一个窗口句柄
    UINT        message;//消息编号
    WPARAM      wParam;//附加消息
    LPARAM      lParam;//附加消息
    DWORD       time;//消息投放到消息队列里面的世界
    POINT       pt;//消息投放到消息队列的时候鼠标的坐标
#ifdef _MAC
    DWORD       lPrivate;
#endif
} MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG;
*/
	MSG msg;
	//收到WM_QUIT 函数返回0
	while (GetMessage(&msg, NULL, 0, 0))
	{
		//将虚拟键消息转为字符消息
		TranslateMessage(&msg);
		//将虚拟键消息分发给窗口处理函数
		DispatchMessage(&msg);
	}

	                                                                                                                                                    
	return 0;
}
//窗口处理函数
LRESULT CALLBACK WindowsProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_CLOSE:
		MessageBox(NULL, L"点了关闭", L"提示", MB_OK);
		DestroyWindow(hwnd);//销毁窗口
		break;
	case WM_DESTROY:
		//发出退出消息
		PostQuitMessage(0);//发出WM_QUIT消息
		break;

	}
	return DefWindowProc(hwnd, uMsg, wParam, lParam);//操作系统默认处理函数,如果没有处理就交给操作系统,
}



LRESULT CALLBACK WindowsProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

 设计窗口
    typedef struct tagWNDCLASSW {
    UINT        style;        //窗口类的风格
    WNDPROC     lpfnWndProc;//窗口处理函数
    int         cbClsExtra;//窗口类的额外扩展空间大小(字节)
    int         cbWndExtra;//窗口的额外扩展空间大小(字节)
    HINSTANCE   hInstance;//当前应用程序实例句柄
    HICON       hIcon;//窗口图标实例句柄,NULL没有图标
    HCURSOR     hCursor;/鼠标图标句柄
    HBRUSH      hbrBackground;//背景画刷句柄
    LPCWSTR     lpszMenuName;//菜单名
    LPCWSTR     lpszClassName;//窗口类型名
    } WNDCLASSW, *PWNDCLASSW, NEAR *NPWNDCLASSW, FAR *LPWNDCLASSW;
    

消息循环
    typedef struct tagMSG {
    HWND        hwnd;//信息发给哪一个窗口句柄
    UINT        message;//消息编号
    WPARAM      wParam;//附加消息
    LPARAM      lParam;//附加消息
    DWORD       time;//消息投放到消息队列里面的世界
    POINT       pt;//消息投放到消息队列的时候鼠标的坐标
#ifdef _MAC
    DWORD       lPrivate;
#endif
} MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG;


LoadIcon()加载一个图标文件
第一个参数,应用程序实例句柄,如果是系统资源传NULL,自定义传hInstance
第二个:资源ID
wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MAIN));//窗口图标实例句柄,NULL没有图标,MAKEINTRESOURCE转换资源ID或者LPCTSTR强转

windows消息机制:

消息循环

//窗口处理函数
LRESULT CALLBACK WindowsProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{

	wchar_t szMsg[100];
	wsprintf(szMsg, L"hWnd:%#x\tuMsg:%#x\twParam:%#x\tlParam:%#x", hwnd, uMsg, wParam, lParam);
	OutputDebugString(szMsg);//在输出窗口显示信息

	switch (uMsg)
	{
	case WM_CREATE://窗口客户区创建消息,此时窗口已经创建好了,只不过没有显示出来
	{	//由CreateWindow或CreateWindowEx函数
		//wparam没有使用
		LPCREATESTRUCT lpcs = (LPCREATESTRUCT)lParam;
		MessageBox(hwnd, L"WM_CREATE", L"提示", MB_OK);

		break;
	}
	case WM_CLOSE:
		//wparam/lparam 没有使用 
		if (IDYES == MessageBox(NULL, L"点了关闭", L"提示", MB_OK))
		{
			DestroyWindow(hwnd);//销毁窗口
		}
		else{
			//return 1;//我已经处理了,系统无需处理,交给默认处理函数
			//return 0;//我没有处理了,系统处理,没有交给系统默认处理函数
			break;
		}
		break;
	case WM_DESTROY:
		//清理工作
		//发出退出消息
		PostQuitMessage(0);//发出WM_QUIT消息
		break;

	}
	return DefWindowProc(hwnd, uMsg, wParam, lParam);//操作系统默认处理函数,如果没有处理就交给操作系统,
}

OutputDebugString();//在输出窗口显示信息

常用消息及消息附加参数:

//窗口处理函数
LRESULT CALLBACK WindowsProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{

	wchar_t szMsg[100];
	//wsprintf(szMsg, L"hWnd:%#x\tuMsg:%#x\twParam:%#x\tlParam:%#x", hwnd, uMsg, wParam, lParam);
	OutputDebugString(szMsg);//在输出窗口显示信息

	switch (uMsg)
	{
	case WM_CREATE://窗口客户区创建消息,此时窗口已经创建好了,只不过没有显示出来
	{	//由CreateWindow或CreateWindowEx函数
		//wparam没有使用
		LPCREATESTRUCT lpcs = (LPCREATESTRUCT)lParam;
		MessageBox(hwnd, L"WM_CREATE", L"提示", MB_OK);

		break;
	}
    //获取键盘按下消息
	case WM_KEYDOWN:
	{
		switch (wParam)
		{
		case VK_RETURN://回车键
		{
            //获取键盘状态,在按return的一瞬间,如果shift已经在return之前按下就小于0
			short s = GetKeyState(VK_SHIFT);
			if (s < 0){
				MessageBox(hwnd, L"Shift+Return", L"提示", MB_OK);
			}
			break;
		}
		case VK_NUMPAD0://右边数字0
			SetWindowText(hwnd, L"右边数字0");
			break;
		case 0x30://上面数字0
			SetWindowText(hwnd, L"上面数字0");
			break;
		}
		if (((lParam >> 24) & 1) == 1)
			SetWindowText(hwnd, L"CTRL");
		break;
	}
	case WM_CHAR://输出键盘字符,跟TranslateMessage(&msg);有关。
		wchar_t t[100];
		wsprintf(t, L"字符: %c", wParam);
		SetWindowText(hwnd, t);
		break;
	case WM_PAINT:
	{
		//开始绘图
		PAINTSTRUCT ps;
		HDC hdc = BeginPaint(hwnd, &ps);
		//绘图
		Rectangle(hdc, 30, 30, 200, 200);
		//输出文字
		wchar_t t[100] = L"哈哈哈哈";
		TextOut(hdc, 200, 200, t, wcslen(t));
		EndPaint(hwnd, &ps);
        break;
	}
    //鼠标左键消息
	case WM_LBUTTONDOWN:
	{
		wchar_t text[100] = { 0 };
		//wParam:按键的状态
		//鼠标坐标值
		int x = GET_X_LPARAM(lParam);
		int y = GET_Y_LPARAM(lParam);
        //或者
		//int x = LOWORD(lParam);
		//int y = HIWORD(lParam);
		wsprintf(szMsg, L"x:%d y:%d",x,y);
		wcscat(text, szMsg);//连接字符串
		if (wParam & MK_CONTROL)
		{
			wcscat(text, L"CONTROL");
		}
		if (wParam & MK_LBUTTON)
		{
			wcscat(text, L"MK_LBUTTON");
		}
		SetWindowText(hwnd, text);
		break;
	}
	case WM_CLOSE:
		//wparam/lparam 没有使用 
		if (IDYES == MessageBox(NULL, L"点了关闭", L"提示", MB_OK))
		{
			DestroyWindow(hwnd);//销毁窗口
		}
		else{
			//return 1;//我已经处理了,系统无需处理,交给默认处理函数
			//return 0;//我没有处理了,系统处理,没有交给系统默认处理函数
			break;
		}
		break;
	case WM_DESTROY:
		//清理工作
		//发出退出消息
		PostQuitMessage(0);//发出WM_QUIT消息
		break;

	}
	return DefWindowProc(hwnd, uMsg, wParam, lParam);//操作系统默认处理函数,如果没有处理就交给操作系统,
}

进队列消息:例

WM_KEYDOWN、WM_LBUTTONDOWN、WM_CHAR、WM_QUIT

不进消息队列:例

WM_CREATE、WM_SIZE、WM_PAINT

发送消息:
        SendMessage
        PostMessage
        SendMessage(hwnd, WM_CLOSE, 0, 0);
        发送键盘消息
        SendMessage(hwnd, WM_KEYDOWN, 0x30, 0);
        区别
        1、SendMessage是阻塞的,PostMessage是非阻塞的
       2、返回值区别:SendMessage返回return的值,PostMessage成功返回true,失败返回false
       3、一般SendMessage用于进程内,PostMessage用于进程外
      

HWND h = FindWindow(L"StandardFrame_DingTalk", L"钉钉");
if (h != NULL)
{
   PostMessage(h, WM_CLOSE, 0, 0);
}

自定义消息:

#define UM_TEST WM_USER(1024)+1  //1024 以后

在消息循环里

case WM_LBUTTONDOWN:
{
	SendMessage(hwnd, UM_TEST, 0x30, 0);
	break;
}
case UM_TEST:
{
	MessageBox(hwnd, L"自定义消息", L"提示", MB_OK);
    break;
}

对话框的两种模式:

1、模态对话框(阻塞):

创建:DialogBox();返回一个值(IDOK/IDCANCEl)

关闭:EndDialog(hWnd, IDCANCEL);

第一个参数:应用程序实例句柄;

第二个参数:资源ID

第三个参数:父窗口

第四个参数:对话框处理函数,返回FALSE;

2、非模态对话框(非阻塞):

创建:CreateDialog();

销毁:DestroyWindow();

关闭:EndDialog(hWnd, IDCANCEL);//没有销毁只是隐藏了起来。

添加对话框:资源-dialog-新建

添加控件:

Picture Control 图片:属性-type-icon-image

Static Test 静态文本

Edit Control 编辑框

Button 按钮

 GetDlgItemText(hWnd, IDC_USER, szUser, 100);//得到文本的内容

#include<Windows.h>
#include"resource.h"
HINSTANCE g_hInstance;
//主对话框处理函数
BOOL CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
//登录对话框处理函数
BOOL CALLBACK Longin(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
//关于对话框处理函数
BOOL CALLBACK About(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
//聊天对话框处理函数
BOOL CALLBACK chat(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
	g_hInstance = hInstance;
	//对话框的两种模式
	//1、模态对话框
	//阻塞
	//创建登录窗口
	int result=DialogBox(hInstance, MAKEINTRESOURCE(IDD_LONGIN), NULL, Longin);
	//创建主窗口
	if (result==IDOK)
		DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, WindowProc);
	//2、非模态对话框
	//创建CreateDialog
	//关闭DestroyWindow
	return 0;
}
BOOL CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
	static HWND Dialogh = NULL;
	switch (uMsg)
	{
	case WM_INITDIALOG://对话框初始化消息,对话框创建好了,只不过没有显示出来
	{
		//MessageBox(hWnd, L"初始化", L"提示", MB_OK);

		SetWindowText(hWnd, L"Test");
		//加载图标
		HICON hIcon = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_ICON1));
		SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
		SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);
		break;
	}
	case WM_COMMAND://命令消息,响应控件,快捷键,菜单的点击
		switch (LOWORD(wParam))
		{
		case IDCANCEL:
			EndDialog(hWnd, IDCANCEL);
			break;
		case IDOK:
			MessageBox(hWnd, L"点击了ok", L"提示", MB_OK);
			break;
		case IDC_ABOUT://关于对话框
			DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_ABOUT), hWnd, About);
			break;
		case IDC_BUTTON2://聊天
		{
			Dialogh = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_DIALOG), hWnd, chat);
			//显示一下
			ShowWindow(Dialogh, SW_SHOW);
			//更新一下
			UpdateWindow(Dialogh);
			break;
		}
		case IDC_BUTTON3:
			ShowWindow(Dialogh, SW_SHOW);
			break;
		default:
			break;
		}
		break;
	case WM_CLOSE:
		EndDialog(hWnd, IDCANCEL);
		break;
	}
	return FALSE;//没有处理的消息交给系统处理,TRUE表示我没有处理,系统也不用处理 
}
//登录对话框处理函数
BOOL CALLBACK Longin(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
	switch (uMsg)
	{
	case WM_COMMAND://命令消息,响应控件,快捷键,菜单的点击
		switch (LOWORD(wParam))
		{
		case IDCANCEL:
			EndDialog(hWnd, IDCANCEL);
			break;
		case IDOK:
		{
			wchar_t szUser[100];
			wchar_t szPassword[100];
			GetDlgItemText(hWnd, IDC_USER, szUser, 100);//得到文本的内容
			GetDlgItemText(hWnd, IDC_PASSWORD, szPassword, 100);
			if (wcscmp(szUser, L"admin") == 0 && wcscmp(szPassword, L"123456") == 0)
				{
					//关闭当前窗口
					EndDialog(hWnd, IDOK);

			}
			else{
					MessageBox(hWnd, L"用户名或密码错误!", L"提示", MB_OK |MB_ICONWARNING);
			}
			break;
		}
		default:
			break;
		}
		break;
	case WM_CLOSE:
		EndDialog(hWnd, IDCANCEL);
		break;
	}
	return FALSE;
}
//关于对话框处理函数
BOOL CALLBACK About(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
	switch (uMsg)
	{
	case WM_COMMAND://命令消息,响应控件,快捷键,菜单的点击
		switch (LOWORD(wParam))
		{
		case IDCANCEL:
			EndDialog(hWnd, IDCANCEL);
			break;
		case IDOK:
			EndDialog(hWnd, IDCANCEL);
		}
		break;
	case WM_CLOSE:
		EndDialog(hWnd, IDCANCEL);
		break;
	}


	return FALSE;
}
//聊天对话框处理函数
BOOL CALLBACK chat(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{

	switch (uMsg)
	{
	case WM_COMMAND://命令消息,响应控件,快捷键,菜单的点击
		switch (LOWORD(wParam))
		{
		case IDCANCEL:
			EndDialog(hWnd, IDCANCEL);//没有真正的关闭非模态对话框,只是隐藏了起来,只有DestroyWindow才能关闭
			//DestroyWindow(hWnd);
			break;
		case IDOK:
			EndDialog(hWnd, IDCANCEL);
		}
		break;
	case WM_CLOSE:
		EndDialog(hWnd, IDCANCEL);
		break;
	}
	return FALSE;
}

MFC 微软封装windows的面向对象的c++类库,封装了windows API:

win32是C语言编写,MFC是C++编写

2019.2017.2022 在 Visual Studio installer中安装

 优点:可重用性、简单

缺点:界面比较丑,做漂亮 的界面比较麻烦,复杂

//第一步
建立CWinApp派生类

//第二步:

重写CWinApp里的InitInstance虚函数

//第三步:

定义CWinApp派生类的全局变量、CMyApp theApp;

//获取当前应用程序实例句柄
//AfxGetInstanceHandle()
//AfxGetApp()->m_hInstance;
//theApp.m_hInstance;
//AfxGetApp()->LoadIcon(MAKEINTRESOURCE(IDI_ICON1));


#include<afxwin.h>
#include"resource.h"

//创建对话框
class CMyDlg :public CDialog
{
public:
	HICON m_hIcon;
public:
	//CMyDlg绑定了这个资源模板
	CMyDlg() :CDialog(IDD_DIALOG1)
	{
		//获取当前应用程序实例句柄
		//AfxGetInstanceHandle()
		//AfxGetApp()->m_hInstance;
		//theApp.m_hInstance;
		//AfxGetApp()->LoadIcon(MAKEINTRESOURCE(IDI_ICON1));
		m_hIcon=LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON1));
	}
	//初始化对话框
	//WM_INITDIALOG,对话框已经创建好了只不过没有显示出来
	BOOL OnInitDialog()
	{
		SetWindowText(L"FirstMFC");//设置窗口标题
		SetIcon(m_hIcon, TRUE);//大图标
		SetIcon(m_hIcon, FALSE);//小图标

		return TRUE;
	}
};


//第一步
//建立CWinApp派生类

class CMyApp :public CWinApp
{
public:
	//MFC初始化过程,相当于main函数,入口
	virtual BOOL InitInstance()//第二步:重写CWinApp里的InitInstance虚函数
	{
		CMyDlg dlg;
		dlg.DoModal();//弹出一个模态对话框
		return TRUE;//返回TRUE表示初始化成功
	}

	//执行完后做是清理工作
	int ExitInstance()
	{

		return CWinApp::ExitInstance();
	}

};
//MFC应用程序核心,一个MFC应用程序只有一个应用程序核心对象
CMyApp theApp;//第三步:定义CWinApp派生类的全局变量

int WINAPI WinMian(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
	return 0;
}

CString类:

	
	CString str = L"MFC";
	//获取字符串长度
	int nLength = str.GetLength();//字符个数
	//判断字符是否为空
	if (str.IsEmpty())
	//清空字符串
	//str.Empty();
	str.GetAt(3);
	str.SetAt(0, '3');
	CString newstr=str.Mid(2, 3);//截取
	newstr=str.MakeLower();//转小写
	//格式化字符串
	newstr.Format(L"当前时间%d", 2023);
	//替换
	str.Replace('C', 'c');
	str.Trim();//去空格
	//获取文件名
	CString strpath = L"D:\\MFC\\Hello\\Debug\\Hello.exe";
	CString e;
	int pos = strpath.ReverseFind('\\');
	if (pos != -1)
		e = strpath.Mid(pos + 1);
	//CString转const char*
	e.GetBuffer();

	//CPOint 坐标点(x,y)
	CPoint p(20, 20);
	CPoint p2(20, 20);
	p += p2;
	//偏移量
	p.Offset(10, 10);
	//CSize 宽和高
	CSize s1(100, 200);
	//CRect 代表一个区域(x,y,x,y)-(l,t,r,b)
	CRect r(100, 100, 200, 200);
	RECT r1 = { 20, 20, 30, 30 };
	CRect r2(&r1);
	CRect r3(p, s1);
	p = r.BottomRight();
	//缩小DeflateRect向中心缩小
	r.DeflateRect(10, 10);
	//扩大DeflateRect向外扩大
	r.InflateRect(10, 10);
	//矩形的交集
	r.IntersectRect(r2, r3);
	//矩形正常化
	r.NormalizeRect();
	CTime t=CTime::GetCurrentTime();
	int y = t.GetYear();
	int m = t.GetMonth();
	int d = t.GetDay();
	int h = t.GetHour();
	int mi = t.GetMinute();
	int s = t.GetSecond();
	int w = t.GetDayOfWeek();
	CString str;
	str.Format(L"%d-%d-%d %d-%d-%d", y
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值