⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainwndproc.cpp

📁 文件管理系统
💻 CPP
字号:
// fileName: mainWndProc.cpp
// by:       zhnyong@21cn.com

// 该文件为主窗口的各种处理子过程,是实现窗口功能自定义的过程

// 包括自定义头文件
#include  "myFileManagement.h"

// 定义全局变量程序实例句柄
HINSTANCE  hInst;

// 定义全局常量消息号ID与消息处理过程指针查找表
const  MessageProc  mainMessages[]=
{
	WM_CREATE,      goCreateMain,
	WM_PAINT,       goPaintMain,
	WM_DESTROY,     goDestroyMain,
	WM_CLOSE,       goCloseMain,
	WM_COMMAND,     goCommandMain,
	WM_ACTIVATE,    goActivateMain,
};

// 定义命令栏图标按钮
const  TBBUTTON  tbBtns[]=
{  //索引号,  命令ID,与菜单相同,   状态,               样式,      用户数据, 标题字符串
	{0,        IDM_OPENTEXTFILE,   TBSTATE_ENABLED,  TBSTYLE_BUTTON ,  0,        0},
	{1,        IDM_SAVETEXTFILE,   TBSTATE_ENABLED,  TBSTYLE_BUTTON ,  0,        0},
};

// 注册窗口类
int  registerWnd(HINSTANCE  hInstance)
{
	// 定义窗口类结构体对象
	WNDCLASS  wc;
	// 定义装入通用控件结构体
	//INITCOMMONCONTROLSEX  icex;

	// 填充结构体中的各元素
	wc.hInstance = hInstance;
	wc.lpszClassName = mainClassName;
	wc.lpfnWndProc = mainWndProc;
	wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wc.style = CS_DBLCLKS;
	wc.hIcon = NULL;
	wc.hCursor = NULL;
	wc.lpszMenuName = NULL;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;

	// 注册窗口类
	if(!RegisterClass(&wc))
		return 0;
	// 注册子窗口fileChildWnd
	if(!registerFileChildWnd(hInstance))
		return 0;
  	return 1;
}

// 创建并显示窗口
int  showMainWnd(HINSTANCE hInstance,LPWSTR lpCmdLine, int nShowCmd)
{
	// 定义窗口句柄
	HWND  hWnd;
	// 存储全局程序实例句柄
	hInst = hInstance;
	// 创建窗口
	hWnd = CreateWindow( mainClassName,
		                 TEXT("文件管理"),
						 WS_VISIBLE,
						 CW_USEDEFAULT,
						 CW_USEDEFAULT,
						 CW_USEDEFAULT,
						 CW_USEDEFAULT,
						 NULL,
						 NULL,
						 hInstance,
						 NULL);
	// 如果窗口创建不成功,返回0退出
	if(!IsWindow(hWnd))
		return 0;
	// 显示窗口,并刷新窗口
	ShowWindow(hWnd,nShowCmd);
	UpdateWindow(hWnd);
	return  1;
}

// 退出主窗口
int  quitMainWnd(HINSTANCE  hInstance, int nExitCode)
{
	return  nExitCode;
}

// 主窗口过程体,窗口过程必须为回调函数
LRESULT  CALLBACK  mainWndProc(HWND hWnd, UINT  msgCode, WPARAM  wParam, LPARAM  lParam)
{
	INT  i;
	// 查找对应的消息ID号,并执行相应的消息处理过程
	for(i=0; i<dim(mainMessages);i++)
	{
		if(msgCode==mainMessages[i].uCode)
			return (*mainMessages[i].functionName)(hWnd,msgCode,wParam,lParam);
	}
	// 对于不在消息查找表中的消息,调用Windows CE的缺省窗口过程
	return  DefWindowProc(hWnd, msgCode, wParam, lParam);
}

// 主窗口收到WM_CREATE消息后的处理过程体
LRESULT  goCreateMain(HWND  hWnd, UINT  msgCode, WPARAM  wParam, LPARAM  lParam)
{
	// 定义命令栏窗口和一个子窗口句柄
	HWND  wndCB,wndFileChild;
	// 定义图标句柄
	HICON  hIcon;
	// 定义CREATESTRUCT结构体指针
	LPCREATESTRUCT  lpcs;
	// 定义图像列表句柄
	HIMAGELIST  imageList;
	
	// 定义五个整型量,分别存放命令栏高度和要创建的子窗口的左上角位置及宽和高
	int  cmdHeight, x, y, xw, yh;
	// 取得程序当前图标,如果不存在,则使用图标资源设定程序图标
	hIcon = (HICON)SendMessage(hWnd,WM_GETICON,ICON_BIG,0);
	if(hIcon==0)
	{
		hIcon = (HICON)LoadImage(hInst,MAKEINTRESOURCE(ID_ICON),IMAGE_ICON,32,32,0);
		SendMessage(hWnd,WM_SETICON,ICON_BIG,(LPARAM)hIcon);
	}

	// 从WM_CREATE消息参数lParam中取得lpcs
	lpcs = (LPCREATESTRUCT)lParam;
	// 获得要创建的主窗口的左上角位置及宽和高
	x=lpcs->x;
	y=lpcs->y;
	xw=lpcs->cx;
	yh=lpcs->cy;
	// 创建命令栏工具条
	wndCB = CommandBar_Create(hInst,hWnd,IDC_CMDBAR);
	// 在命令栏窗口中插入菜单
	CommandBar_InsertMenubar(wndCB,hInst,ID_MENU,0);
	// 在命令栏中列表中添加图标容器
	CommandBar_AddBitmap(wndCB, hInst, ID_OPENFILEICON,1,16,16);
	CommandBar_AddBitmap(wndCB, hInst, ID_SAVEFILEICON,1,16,16);
	// 将图像列表与命令栏图标容器相关联
	imageList = (HIMAGELIST)SendMessage(wndCB, TB_GETIMAGELIST, 0,0);
	// 向图像列表添加二个图标
	hIcon =(HICON)LoadImage(hInst,MAKEINTRESOURCE(ID_OPENFILEICON),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
	ImageList_AddIcon(imageList,hIcon);
	hIcon =(HICON)LoadImage(hInst,MAKEINTRESOURCE(ID_SAVEFILEICON),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
	ImageList_AddIcon(imageList,hIcon);
	DeleteObject(hIcon);

	// 在命令栏中添加二个按钮与二个图标相对应
	CommandBar_AddButtons(wndCB,2,tbBtns);
	
	// 在命令栏添加Close按钮
	CommandBar_AddAdornments(wndCB,0,0);
	// 获得命令栏的高度
	cmdHeight = CommandBar_Height(wndCB);
	// 在当前窗口hWnd中创建子窗口,左上角为(x,cmdHeight),宽为xw,高为yh-2*cmdHeight
	wndFileChild = CreateWindow(strFileChildClassName,
		                        TEXT(""),
								WS_VISIBLE | WS_CHILD,
								x,
								cmdHeight,
								xw,
								yh-2*cmdHeight,
								hWnd,
								(HMENU)IDW_FILECHILD,
								hInst,
								NULL);
	// 如果创建子窗口失败,则关闭主窗口退出程序
	if(!IsWindow(wndFileChild))
	{
		DestroyWindow(hWnd);
		return 0;
	}
	// 在主窗口上面显示子窗口
	ShowWindow(wndFileChild,SW_SHOW);
	return 0;
}

// 主窗口收到WM_DESTROY消息后的处理过程体
LRESULT  goDestroyMain(HWND  hWnd, UINT  msgCode, WPARAM  wParam, LPARAM  lParam)
{
	// 向主窗口发送WM_QUIT消息,并把0传给msg.wParam
	PostQuitMessage(0);
	return 0;
}

// 主窗口收到WM_CLOSE消息后的处理过程体
LRESULT  goCloseMain(HWND  hWnd, UINT  msgCode, WPARAM  wParam, LPARAM  lParam)
{
	INT  idCode;
	// 弹出带有YES和NO控件的简单消息对话框
	idCode = MessageBox(hWnd,TEXT("退出程序吗?"),TEXT("退出"),MB_YESNO | MB_ICONQUESTION);
	// 如果点击NO则返回0,单击YES则退出
	if(idCode == IDNO)
		return 0;
	PostQuitMessage(0);
	return 0;
}

// 主窗口收到WM_PAINT消息后的处理过程体
LRESULT  goPaintMain(HWND  hWnd, UINT  msgCode, WPARAM  wParam, LPARAM  lParam)
{
	return  0;
}

// 主窗口收到WM_COMMAND消息后的处理过程体
LRESULT  goCommandMain(HWND  hWnd,UINT  msgCode, WPARAM  wParam, LPARAM  lParam)
{
	// 定义字变量menuID
	WORD  menuID;
	// 获得菜单ID号
	menuID = (WORD)LOWORD(wParam);
	if(menuID == IDM_EXIT)
	{
		// 向主窗口发送WM_CLOSE消息
		SendMessage(hWnd,WM_CLOSE,0,0);
	}
	else
	{
		// 向子窗口发送自定义消息MYWM_MENUCLICK,该消息的二个参数即为WM_COMMAND的二个参数
		SendMessage(GetDlgItem(hWnd,IDW_FILECHILD),MYWM_MENUCLICK,wParam,lParam);
	}
	return 0;
}

// 主窗口收到WM_ACTIVATE消息后的处理过程体
LRESULT  goActivateMain(HWND  hWnd,UINT  msgCode,WPARAM  wParam,LPARAM  lParam)
{
	// 定义窗口句柄
	HWND  wndFileChild;
	// 获得子窗口
	wndFileChild = GetDlgItem(hWnd,IDW_FILECHILD);
	// 刷新主窗口
	UpdateWindow(hWnd);
	// 在主窗口上面显示子窗口
	ShowWindow(wndFileChild,SW_SHOW);
	// 刷新子窗口
	UpdateWindow(wndFileChild);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -