Win32-窗口注册和创建-MDI注册和创建
/*窗口注册*/ // 系统全局窗口类 - BUTTON #include <windows.h> HINSTANCE g_hInst = NULL; /* 窗口类分为下面3种: 系统全局窗口类; 应用程序全局窗口类; 局部窗口类; 1.WinMain入口函数 2.窗口过程处理函数 3.注册窗口 4.创建窗口 5.显示窗口 6.消息循环 */ // 窗口过程处理函数 LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, uMsg, wParam, lParam); } // 创建一个系统全局窗口,这个窗口不需要注册 // 系统默认就注册好了,直接使用 // 例如:下面是创建一个系统全局的按钮,这个按钮 // 她的类名就是BUTTON不能更改为其他的 HWND CreateButton() { HWND hWnd = CreateWindow("BUTTON", "Button", WS_OVERLAPPEDWINDOW, 0, 0, 500, 600, NULL, NULL, g_hInst, NULL); return hWnd; } // 显示窗口 void DisplayWnd(HWND hWnd) { ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); } // 消息循环 void Message() { MSG msg = {0}; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } } // WinMain入口函数 int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR pszCmdLine, int nShowCmd) { g_hInst = hInstance; HWND hWndBtn = CreateButton(); DisplayWnd(hWndBtn); Message(); return 0; } --------------------------------------------------------------------------- // 系统全局窗口类 - EDIT #include <windows.h> HINSTANCE g_hInst = NULL; // 窗口过程函数 LRESULT CALLBACK WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, uMsg, wParam, lParam); } // 创建系统窗口全局类 HWND CreateButton() { HWND hwnd = CreateWindow("EDIT", "Button", WS_OVERLAPPEDWINDOW, 0, 0, 600, 600, NULL, NULL, g_hInst, NULL ); return hwnd; } // 显示窗口 void DisplayWnd(HWND hWnd) { ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); } // 消息窗口 void Message() { MSG msg = {0}; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } } // WinMain入口函数 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { g_hInst = hInstance; HWND hWndBtn = CreateButton(); DisplayWnd(hWndBtn); Message(); return 0; } ----------------------------------------------------------------------- // 创建应用程序全局窗口类 #include <windows.h> HINSTANCE g_hInst = NULL; // 窗口过程函数 LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, uMsg, wParam, lParam); } // 显示窗口 void DisplayWnd(HWND hWnd) { ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); } // 消息窗口 void Message() { MSG msg = {0}; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } } // 注册窗口 BOOL RegisterWnd(LPSTR pszClassName) { WNDCLASSEX wce = {0}; wce.cbSize = sizeof(wce);// 增加了这个结构体的宽度字段 wce.style = CS_VREDRAW|CS_HREDRAW; wce.lpfnWndProc = WndProc; wce.cbClsExtra = 100; wce.cbWndExtra = 200; wce.hCursor = NULL; wce.hIcon = NULL; wce.hbrBackground = HBRUSH(COLOR_BTNFACE+1); wce.lpszClassName = pszClassName; wce.hIconSm = NULL; wce.hInstance = g_hInst; ATOM nAtom = RegisterClassEx(&wce); if (nAtom == 0) { return FALSE; } return TRUE; } HWND CreateWnd(LPSTR pszClassName) { HWND hWnd = CreateWindow(pszClassName, "MyWindowsCntf", WS_OVERLAPPEDWINDOW, 0, 0, 800, 600, NULL, NULL, g_hInst, NULL); return hWnd; } // WinMain入口函数 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { g_hInst = hInstance; RegisterWnd("MyWindowsCC"); HWND hMyWindows = CreateWnd("MyWindowsCC"); DisplayWnd(hMyWindows); Message(); return 0; } ----------------------------------------------------------------- // 窗口附加信息 #include <windows.h> #include <stdio.h> HINSTANCE g_hInst = NULL; // 窗口过程函数 LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, uMsg, wParam, lParam); } // 显示窗口 void DisplayWnd(HWND hWnd) { ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); } // 消息窗口 void Message() { MSG msg = {0}; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } } // 注册窗口 BOOL RegisterWnd(LPSTR pszClassName) { WNDCLASSEX wce = {0}; wce.cbSize = sizeof(wce);// 增加了这个结构体的宽度字段 wce.style = CS_VREDRAW|CS_HREDRAW; wce.lpfnWndProc = WndProc; wce.cbClsExtra = 100; wce.cbWndExtra = 200; wce.hCursor = NULL; wce.hIcon = NULL; wce.hbrBackground = HBRUSH(COLOR_BTNFACE+1); wce.lpszClassName = pszClassName; wce.hIconSm = NULL; wce.hInstance = g_hInst; ATOM nAtom = RegisterClassEx(&wce); if (nAtom == 0) { return FALSE; } return TRUE; } HWND CreateWnd(LPSTR pszClassName) { HWND hWnd = CreateWindow(pszClassName, "MyWindowsCntf", WS_OVERLAPPEDWINDOW, 0, 0, 800, 600, NULL, NULL, g_hInst, NULL); return hWnd; } // 设置窗口附加信息 void SetExtra(HWND hWnd) { // 设置CLASS附加数据 SetClassLong(hWnd, 2, 400); // 设置Window附加数据 SetWindowLong(hWnd, 2, 800); } // 获取窗口附加信息 void GetExtra(HWND hWnd) { // 获取CLASS附加数据 DWORD nClass =GetClassLong(hWnd, 2); // 获取Window附加数据 DWORD nWnd = GetWindowLong(hWnd, 2); // 让其显示 CHAR szText[280] = {0}; sprintf(szText, "CLASS:%d WINDOW:%d",nClass, nWnd); MessageBox(NULL, szText, "Extra", MB_OK); } // WinMain入口函数 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { g_hInst = hInstance; RegisterWnd("MyWindowsCC"); HWND hMyWindows = CreateWnd("MyWindowsCC"); HWND hMyWndYC = CreateWnd("MyWindowsCC"); DisplayWnd(hMyWindows); GetExtra(hMyWndYC); SetExtra(hMyWindows); GetExtra(hMyWindows); Message(); return 0; } ------------------------------------------------------------------------ 窗口创建 // WinCreate.cpp : Defines the entry point for the application. // #include "stdafx.h" #include <stdio.h> // 全局变量应用程序实例句柄 HINSTANCE g_hInst = NULL; // 窗口过程调用函数 LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, uMsg, wParam, lParam); } // 创建窗口类并注册此类 BOOL MyRegisterWnd(LPSTR pszClassName) { WNDCLASSEX wce = {0}; wce.cbSize = sizeof(wce); wce.style = CS_HREDRAW|CS_VREDRAW; wce.cbClsExtra = 0; wce.cbWndExtra = 0; wce.lpfnWndProc = WndProc; wce.hIcon = NULL; wce.hCursor = NULL; wce.hbrBackground = HBRUSH(COLOR_WINDOW); wce.hInstance = g_hInst; wce.lpszClassName = pszClassName; wce.lpszMenuName = NULL; wce.hIconSm = NULL; ATOM nAtom = RegisterClassEx(&wce); if (nAtom == 0) { return FALSE; } return TRUE; } // 创建窗口 HWND CreateWnd(LPSTR pszClassName) { HWND hWnd = CreateWindowEx(0, pszClassName, "MyWindowsCNTFCC", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, g_hInst, NULL ); return hWnd; } // 窗口显示 void DisplayWnd(HWND hWnd) { ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); } // 消息循环 void Message() { MSG msg = {0}; while (GetMessage(&msg, NULL, 0, 0)) { DispatchMessage(&msg); } } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // TODO: Place code here. g_hInst = hInstance; MyRegisterWnd("CncfWindowsCC"); HWND hWnd = CreateWnd("CncfWindowsCC"); DisplayWnd(hWnd); Message(); return 0; } -------------------------------------------------------------------------------- // 传递多个参数创建窗口 #include "stdafx.h" #include <stdio.h> // 全局变量应用程序实例句柄 HINSTANCE g_hInst = NULL; // 窗口过程调用函数 LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, uMsg, wParam, lParam); } LRESULT CALLBACK ChildProc( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam ) { return DefWindowProc( hWnd, nMsg, wParam, lParam ); } // 创建窗口类并注册此类 BOOL MyRegisterWnd(LPSTR pszClassName, WNDPROC proc, int nBrush) { WNDCLASSEX wce = {0}; wce.cbSize = sizeof(wce); wce.style = CS_HREDRAW|CS_VREDRAW; wce.cbClsExtra = 0; wce.cbWndExtra = 0; wce.lpfnWndProc = proc; wce.hIcon = NULL; wce.hCursor = NULL; wce.hbrBackground = HBRUSH(nBrush); wce.hInstance = g_hInst; wce.lpszClassName = pszClassName; wce.lpszMenuName = NULL; wce.hIconSm = NULL; ATOM nAtom = RegisterClassEx(&wce); if (nAtom == 0) { return FALSE; } return TRUE; } // 创建窗口 HWND CreateWnd(LPSTR pszClassName, DWORD nStyle, HWND hParent) { HWND hWnd = CreateWindowEx(0, pszClassName, "MyWindowsCNTFCC", nStyle, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hParent, NULL, g_hInst, NULL ); return hWnd; } // 窗口显示 void DisplayWnd(HWND hWnd) { ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); } // 消息循环 void Message() { MSG msg = {0}; while (GetMessage(&msg, NULL, 0, 0)) { DispatchMessage(&msg); } } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // TODO: Place code here. g_hInst = hInstance; MyRegisterWnd("CncfWindowsCC", WndProc, COLOR_BTNFACE+1); HWND hWnd = CreateWnd("CncfWindowsCC", WS_OVERLAPPEDWINDOW, NULL); DisplayWnd(hWnd); Message(); return 0; } -------------------------------------------------------------------------------- // 子窗口创建 // WinCreate.cpp : Defines the entry point for the application. // #include "stdafx.h" #include <stdio.h> // 全局变量应用程序实例句柄 HINSTANCE g_hInst = NULL; // 父窗口过程调用函数 LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, uMsg, wParam, lParam); } // 子窗口过程处理函数 LRESULT CALLBACK ChildProc( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam ) { return DefWindowProc( hWnd, nMsg, wParam, lParam ); } // 创建窗口类并注册此类 BOOL MyRegisterWnd(LPSTR pszClassName, WNDPROC proc, int nBrush) { WNDCLASSEX wce = {0}; wce.cbSize = sizeof(wce); wce.style = CS_HREDRAW|CS_VREDRAW; wce.cbClsExtra = 0; wce.cbWndExtra = 0; wce.lpfnWndProc = proc; wce.hIcon = NULL; wce.hCursor = NULL; wce.hbrBackground = HBRUSH(nBrush); wce.hInstance = g_hInst; wce.lpszClassName = pszClassName; wce.lpszMenuName = NULL; wce.hIconSm = NULL; ATOM nAtom = RegisterClassEx(&wce); if (nAtom == 0) { return FALSE; } return TRUE; } // 创建窗口 HWND CreateWnd(LPSTR pszClassName, DWORD nStyle, HWND hParent) { HWND hWnd = CreateWindowEx(0, pszClassName, "MyWindowsCNTFCC", nStyle, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hParent, NULL, g_hInst, NULL ); return hWnd; } // 窗口显示 void DisplayWnd(HWND hWnd) { ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); } // 消息处理函数 void Message() { MSG msg = {0}; while (GetMessage(&msg, NULL, 0, 0)) { DispatchMessage(&msg); } } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { g_hInst = hInstance; // 注册父窗口类 MyRegisterWnd("CncfWindowsCC", WndProc, COLOR_BTNFACE+1); // 注册子窗口类 MyRegisterWnd("CntfChildWndCC", ChildProc, COLOR_WINDOW); // 创建父窗口 HWND hWnd = CreateWnd("CncfWindowsCC", WS_OVERLAPPEDWINDOW, NULL); // 创建子窗口 HWND hChild1 = CreateWnd("CntfChildWndCC", WS_CHILD|WS_VISIBLE|WS_BORDER| WS_THICKFRAME|WS_CAPTION|WS_SYSMENU| WS_MINIMIZEBOX|WS_MAXIMIZEBOX, hWnd); HWND hChild2 = CreateWnd("CntfChildWndCC", WS_POPUP|WS_VISIBLE| WS_THICKFRAME|WS_CAPTION|WS_SYSMENU, hWnd ); HWND hChild3 = CreateWnd("CntfChildWndCC", WS_CHILD|WS_VISIBLE|WS_BORDER, hWnd ); // 移动窗口位置 MoveWindow( hChild1, 100, 100, 200, 200, TRUE ); MoveWindow( hChild2, 100, 200, 200, 200, TRUE ); MoveWindow( hChild3, 100, 300, 200, 200, TRUE ); // 显示父窗口 DisplayWnd(hWnd); Message(); return 0; } -------------------------------------------------------------------------------- // 使用MDI创建主窗口和子窗口 // WinMDI.cpp : Defines the entry point for the application. // #include "stdafx.h" HINSTANCE g_hInst = NULL; HWND g_hMDIClient = NULL; //主窗口的窗口处理函数 LRESULT CALLBACK MainProc( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam ) { switch( nMsg ) { case WM_DESTROY: PostQuitMessage( 0 ); return 0; } return DefFrameProc( hWnd, g_hMDIClient, nMsg, wParam, lParam ); } //子窗口的窗口处理函数 LRESULT CALLBACK ChildProc( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam ) { return DefMDIChildProc( hWnd, nMsg, wParam, lParam ); } //窗口注册函数 BOOL RegisterWnd( LPSTR pszClassName, WNDPROC Proc, int nBrush ) { WNDCLASSEX wce = { 0 }; wce.cbSize = sizeof( wce ); wce.style = CS_HREDRAW|CS_VREDRAW; wce.cbClsExtra = 0; wce.cbWndExtra = 0; wce.lpfnWndProc= Proc; wce.hInstance = g_hInst; wce.hCursor = NULL; wce.hIcon = NULL; wce.hbrBackground = HBRUSH(nBrush); wce.lpszClassName = pszClassName; wce.lpszMenuName = NULL; wce.hIconSm = NULL; ATOM nAtom = RegisterClassEx( &wce ); if( nAtom == 0 ) { return FALSE; } return TRUE; } //显示窗口 void DisplayWnd( HWND hWnd ) { ShowWindow( hWnd, SW_SHOW ); UpdateWindow( hWnd ); } //消息循环 void Message( ) { MSG msg = { 0 }; while( GetMessage( &msg, NULL, 0, 0 ) ) { DispatchMessage( &msg ); } } //创建主窗口 HWND CreateMainWnd( LPSTR pszClassName ) { HWND hWnd = CreateWindowEx( 0, pszClassName, "MainWnd", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, g_hInst, NULL ); return hWnd; } //创建MDICLIENT窗口 HWND CreateMDIClient( HWND hParent ) { CLIENTCREATESTRUCT cs = { 0 }; cs.idFirstChild = 1000; HWND hWnd = CreateWindowEx( 0, "MDICLIENT", "MainWnd", WS_CHILD|WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hParent, NULL, g_hInst, &cs ); return hWnd; } //创建MDI子窗口 HWND CreateChildWnd( LPSTR pszClassName, HWND hParent ) { HWND hWnd = CreateWindowEx( WS_EX_MDICHILD, pszClassName, "ChildWnd", WS_CHILD|WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hParent, NULL, g_hInst, NULL ); return hWnd; } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //注册主窗口 RegisterWnd( "MainWnd", MainProc, COLOR_BTNFACE+1 ); //注册子窗口 RegisterWnd( "ChildWnd", ChildProc, COLOR_WINDOW ); //创建MDI主窗口 HWND hMain = CreateMainWnd( "MainWnd" ); //创建MDICLIENT窗口 g_hMDIClient = CreateMDIClient( hMain ); MoveWindow( g_hMDIClient, 0, 0, 500, 500, TRUE ); //创建MDI子窗口 CreateChildWnd( "ChildWnd", g_hMDIClient ); CreateChildWnd( "ChildWnd", g_hMDIClient ); CreateChildWnd( "ChildWnd", g_hMDIClient ); //显示和消息处理 DisplayWnd( hMain ); Message( ); return 0; } -------------------------------------------------------------------------------- // WinMDI.cpp : Defines the entry point for the application. // #include "stdafx.h" HINSTANCE g_hInst = NULL; HWND g_hMDIClient = NULL; //主窗口的窗口处理函数 LRESULT CALLBACK MainProc( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam ) { switch( nMsg ) { case WM_DESTROY: PostQuitMessage( 0 ); return 0; } return DefFrameProc( hWnd, g_hMDIClient, nMsg, wParam, lParam ); } //子窗口的窗口处理函数 LRESULT CALLBACK ChildProc( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam ) { return DefMDIChildProc( hWnd, nMsg, wParam, lParam ); } //窗口注册函数 BOOL RegisterWnd( LPSTR pszClassName, WNDPROC Proc, int nBrush ) { WNDCLASSEX wce = { 0 }; wce.cbSize = sizeof( wce ); wce.style = CS_HREDRAW|CS_VREDRAW; wce.cbClsExtra = 0; wce.cbWndExtra = 0; wce.lpfnWndProc= Proc; wce.hInstance = g_hInst; wce.hCursor = NULL; wce.hIcon = NULL; wce.hbrBackground = HBRUSH(nBrush); wce.lpszClassName = pszClassName; wce.lpszMenuName = NULL; wce.hIconSm = NULL; ATOM nAtom = RegisterClassEx( &wce ); if( nAtom == 0 ) { return FALSE; } return TRUE; } //显示窗口 void DisplayWnd( HWND hWnd ) { ShowWindow( hWnd, SW_SHOW ); UpdateWindow( hWnd ); } //消息循环 void Message( ) { MSG msg = { 0 }; while( GetMessage( &msg, NULL, 0, 0 ) ) { DispatchMessage( &msg ); } } //创建主窗口 HWND CreateMainWnd( LPSTR pszClassName ) { HWND hWnd = CreateWindowEx( 0, pszClassName, "MainWnd", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, g_hInst, NULL ); return hWnd; } //创建MDICLIENT窗口 HWND CreateMDIClient( HWND hParent ) { CLIENTCREATESTRUCT cs = { 0 }; cs.idFirstChild = 1000; HWND hWnd = CreateWindowEx( 0, "MDICLIENT", "MainWnd", WS_CHILD|WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hParent, NULL, g_hInst, &cs ); return hWnd; } //创建MDI子窗口 HWND CreateChildWnd( LPSTR pszClassName, HWND hParent ) { HWND hWnd = CreateWindowEx( WS_EX_MDICHILD, pszClassName, "ChildWnd", WS_CHILD|WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hParent, NULL, g_hInst, NULL ); return hWnd; } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //注册主窗口 RegisterWnd( "MainWnd", MainProc, COLOR_BTNFACE+1 ); //注册子窗口 RegisterWnd( "ChildWnd", ChildProc, COLOR_WINDOW ); //创建MDI主窗口 HWND hMain = CreateMainWnd( "MainWnd" ); //创建MDICLIENT窗口 g_hMDIClient = CreateMDIClient( hMain ); MoveWindow( g_hMDIClient, 0, 0, 500, 500, TRUE ); //创建MDI子窗口 CreateChildWnd( "ChildWnd", g_hMDIClient ); CreateChildWnd( "ChildWnd", g_hMDIClient ); CreateChildWnd( "ChildWnd", g_hMDIClient ); //显示和消息处理 DisplayWnd( hMain ); Message( ); return 0; }
效果展示
窗口注册和创建&添加附加信息
窗口和子窗口创建
使用MDI创建主窗口和子窗口
迷茫的人生,需要不断努力,才能看清远方模糊的志向!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2020-11-13 HTB-靶机-Blocky
2020-11-13 HTB-靶机-Jail