通过Windows API实现的MDI简易程序
##
#include <windows.h>
#include <tchar.h> HINSTANCE hInst; ATOM WindowRegister(WNDPROC lpfnWndProc, char *lpClname, HBRUSH hbrBack)
{
WNDCLASSEX wnd;
wnd.cbClsExtra = ;
wnd.cbSize = sizeof(WNDCLASSEX);
wnd.cbWndExtra = ;
wnd.hbrBackground = hbrBack;
wnd.hCursor = LoadCursor(NULL, IDC_ARROW);
wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wnd.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wnd.hInstance = hInst;
wnd.lpfnWndProc = lpfnWndProc;
wnd.lpszClassName = lpClname;
wnd.lpszMenuName = NULL;
wnd.style = CS_HREDRAW | CS_VREDRAW;
return RegisterClassEx(&wnd);
} LRESULT CALLBACK ClientProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HWND hWndEdit;
RECT rect;
switch (uMsg)
{
case WM_CREATE:
GetClientRect(hWnd, &rect);
hWndEdit = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("Edit"), NULL,
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_MULTILINE,
, , rect.right, rect.bottom, hWnd, NULL, hInst, NULL);
return ;
case WM_SIZE:
hWndEdit = GetWindow(hWnd, GW_CHILD); GetClientRect(hWnd, &rect);
SetWindowPos(hWndEdit, NULL, , , rect.right, rect.bottom, SWP_NOMOVE | SWP_NOZORDER);
break;
case WM_MDIACTIVATE:
return ;
} return DefMDIChildProc(hWnd, uMsg, wParam, lParam);
} LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static HWND hClient;
HMENU hMenu;
MDICREATESTRUCT mdic;
CLIENTCREATESTRUCT ccs;
HWND hChild; switch (uMsg)
{
case WM_CREATE:
WindowRegister(ClientProc, _T("Client"), (HBRUSH)GetStockObject(WHITE_BRUSH));
hMenu = CreateMenu();
AppendMenu(hMenu, MF_STRING, , _T("New(&N)"));
SetMenu(hWnd, hMenu); ccs.hWindowMenu = NULL;
ccs.idFirstChild = ; hClient = CreateWindow(_T("MDICLIENT"), NULL,
WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN,
, , , , hWnd, NULL, hInst, &ccs);
return ;
case WM_DESTROY: PostQuitMessage(); return ;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case :
mdic.szClass = _T("Client");
mdic.szTitle = _T("Document");
mdic.hOwner = hInst;
mdic.x = CW_USEDEFAULT;
mdic.y = CW_USEDEFAULT;
mdic.cx = CW_USEDEFAULT;
mdic.cy = CW_USEDEFAULT;
mdic.style = ;
mdic.lParam = ; hChild = (HWND)SendMessage(hClient, WM_MDICREATE, , (LPARAM)&mdic);
break;
default:
hChild = (HWND)SendMessage(hClient, WM_MDIGETACTIVE, , );
if(IsWindow(hChild))
SendMessage(hChild, WM_COMMAND, wParam, lParam);
break;
}
break;
}
return DefFrameProc(hWnd, hClient, uMsg, wParam, lParam);
} INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nShowCmd)
{
MSG msg;
HWND hClient;
HWND hWnd; WindowRegister(WndProc, _T("Sample"), (HBRUSH)(COLOR_APPWORKSPACE + ));
hInst = hInstance;
hWnd = CreateWindow(_T("Sample"), _T("Sample"),WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,, , , , NULL, NULL, hInstance, NULL); if (!hWnd)
return FALSE;
hClient=GetWindow(hWnd, GW_CHILD); ShowWindow(hWnd, nShowCmd);
UpdateWindow(hWnd); while (GetMessage(&msg, NULL, , ))
{
if (!TranslateMDISysAccel(hClient, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
通过Windows API实现的MDI简易程序的更多相关文章
- WINDOWS API 大全(二)
9. API之设备场景函数 CombineRgn 将两个区域组合为一个新区域CombineTransform 驱动世界转换.它相当于依顺序进行两次转换CreateCompatibleDC 创建一个与特 ...
- C# Windows API
API:应用程序接口(API:Application Program Interface)应用程序接口(API:application programming interface)是一组定义.程序及协 ...
- Windows API 函数列表 附帮助手册
所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了. 帮助手册:700多个Windows API的函数手册 免费下载 API之网络函数 API之消息函数 API之 ...
- Windows API Hooking in Python
catalogue . 相关基础知识 . Deviare API Hook Overview . 使用ctypes调用Windows API . pydbg . winappdbg . dll inj ...
- 初识【Windows API】--文本去重
最近学习操作系统中,老师布置了一个作业,运用系统调用函数删除文件夹下两个重复文本类文件,Linux玩不动,于是就只能在Windows下进行了. 看了一下介绍Windows API的博客: 点击打开 基 ...
- C#调用windows API的一些方法
使用C#调用windows API(从其它地方总结来的,以备查询) C#调用windows API也可以叫做C#如何直接调用非托管代码,通常有2种方法: 1. 直接调用从 DLL 导出的函数. 2. ...
- Qt中使用Windows API
在Windows平台上进行开发,不可避免与Windows API打交道,Qt中使用的时候要添加对应API的头文件和链接lib文件,另外使用的Windows API的代码部分要使用#ifdef Q_O ...
- 在VBA中使用Windows API
VBA是一种强大的编程语言,可用于自定义Microsoft Office解决方案.通过使用VBA处理一个或多个Office应用程序对象模型,可以容易地修改Office应用程序的功能或者能够使两个或多个 ...
- FormatMessage与GetLastError配合使用,排查windows api调用过程中的错误
前一段时间在学习windows api调用过程中,遇到过一些调用错误或者程序没能显示预期的结果,或者直接出现vc运行时错误. 这对新手来说是司空见惯的事,因为不太熟悉难免会出错,出错的信息如果能显示很 ...
随机推荐
- dev-client.js-配合dev-server.js监听html文件改动也能够触发自动刷新
// 引入 webpack-hot-middleware/client var hotClient = require('webpack-hot-middleware/client'); // 订阅事 ...
- oracle数据库冷恢复
场 景:客户的服务器是在虚拟机上,结果虚拟机的服务器的硬盘坏掉了.硬盘换掉后,系统成功恢复出来,但是登录虚拟机后,数据库无法启动. 解决方案:通过冷恢复将数据库还原.在自己的电脑上搭建一个 ...
- Vue 1.0 和 2.0 执行顺序
// Vue 生命周期 // Vue 1.0 // 执行步骤:选项/生命周期钩子 // 1 init // 2 created // 3 beforeCompile // 4 compiled // ...
- android studio 安装过程
下载 安装版本:3.0.1 下载地址:https://pan.baidu.com/s/1Uq6QSZXpmWUiBW6K-tRqKw 密码:zbtb 安装 双击安装包进行安装,选择安装位置,安装完成打 ...
- Taxi
/* After the lessons n groups of schoolchildren went outside and decided to visit Polycarpus to cele ...
- 2019年学Java开发有优势吗?
随着信息科技的发展,在我们的日程生活和工作中到处充斥和使用着互联网信息技术.事实说明,互联网已经越来越广泛地深入到人们生活的方方面面,Java技术服务市场需求空缺会越来越大.学会一门IT技术,将拥有更 ...
- python提取分析表格数据
#/bin/python3.4# -*- coding: utf-8 -*- import xlrd def open_excel(file="file.xls"): try: d ...
- LaTeX数学公式大全
原写于我的洛谷博客(传送门),现搬到这个博客上. 建议去洛谷博客上看,因为两边的编辑器在有些功能上不能通用,所以之后若有删改或新增内容只在洛谷博客上弄,这边就懒得改了. 原本是针对洛谷的编辑器,不过懒 ...
- BZOJ1123或洛谷3469 [POI2008]BLO-Blockade
BZOJ原题链接 洛谷原题链接 若第\(i\)个点不是割点,那么只有这个点单独形成一个连通块,其它点依旧连通,则答案为\(2\times (n-1)\). 若第\(i\)个点是割点,那么去掉这个点相关 ...
- mysql 优化之一
提升速度 show variables like 'innodb_flush_log_at_trx_commit'; 会显示为1 set global innodb_flush_log_at_trx ...