通过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运行时错误. 这对新手来说是司空见惯的事,因为不太熟悉难免会出错,出错的信息如果能显示很 ...
随机推荐
- faiss CPU版本+GPU版本安装
faiss安装 faiss是facebook开发的有CPU版本和GPU版本的求密集向量相似性和进行密集向量聚类的库. faiss用c++编写,安装faiss需要在github上下载其c++源码并用ma ...
- xml转化为Dictionary
代码 public SortedDictionary<string, object> FromXml(string xml) { SortedDictionary<string, o ...
- c#task list waitall task waitany
上边的主线程会被卡住: 7个同时开发,谁先完成之后, 需要完成某个工作,可以用waitany 2: 不卡界面的做法 加上以上命令就不卡,是子线程做的事 //Task task = taskFactor ...
- hdu 1509 & hdu 1873 & hdu 1896 (基础优先队列)
http://acm.hdu.edu.cn/showproblem.php?pid=1509 裸的优先队列的应用,输入PUT的时候输入名字,值和优先值进队列,输入GRT的时候输出优先值小的名字和对应的 ...
- MAC/Xcode简单操作命令
快捷键: command(windows) + c: 复制 command + V : 粘贴 command + x: 剪切(只在当前应用程序内有效) 在mac系统下表示剪切功能: 先command ...
- Jsonpath的基本使用
JSONPath - 是xpath在json的应用. xml最大的优点就有大量的工具可以分析,转换,和选择性的提取文档中的数据.XPath是这些最强大的工具之一. 如果可以使用xpath来解析js ...
- Luogu 2059 [JLOI2013]卡牌游戏 - 概率DP
Solution 设状态 $F[i][j] $为 还剩余 $i$ 个人时, 第 $j$ 个人 的胜率. 边界: $F[1][1] = 1$(只剩下一个人了). 这样设置状态就能使 $i-1$ 个人的答 ...
- 常用到的photoshop实用设计功能都在这了!
常用到的photoshop实用设计功能都在这了!赶快收藏学起来,需转不谢~ 编辑:千锋UI设计
- MathExam
MathExam 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 575 605 • Est ...
- canvas 实现圆环效果
var race = document.getElementById('race'); var cxt = race.getContext('2d'); var ang = 0; var speed ...