实习随手记-win32创建窗口操作

来源:互联网 发布:木地板怎么解决知乎 编辑:程序博客网 时间:2024/05/24 06:34

任务:

<写一个窗口程序A 并能够接收退出消息, 写第二程序B 向A窗口发送退出消息 ,让A退出>

#include<Windows.h>#include<tchar.h> #include<string.h>#include<stdio.h>//声明窗口处理函数LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lparam);LRESULT CALLBACK WindowProcSend(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lparam);//主程序入口int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInatance,LPSTR lpCmdLine,int nCmdShow){//LPTSTR get=GetCommandLine();//MessageBox(NULL, get, _T("警告"), MB_OK);WNDCLASS wndclass;wndclass.lpfnWndProc = WindowProc;//lpfnWndProc参数就是用来设置你用哪个WindowProc来处理消息,前面我说过,我们只要不更改回调函数的返回值和参数的类型和顺序,就可以随意设置函数的名字,那为什么系统可以找到我们用的回调函数呢,对的,就是通过lpfnWndProc传进去的,它是一个函数指针,也就是它里面保存的是我们定义的WindowProc的入口地址,使用很简单,我们只需要把函数的名字传给它就可以了。wndclass.cbClsExtra = 0;wndclass.cbWndExtra = 0;wndclass.style = CS_HREDRAW | CS_VREDRAW;wndclass.lpszClassName = _T("窗体1");wndclass.hInstance = hInstance;wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);wndclass.hIcon = 0;wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);wndclass.lpszMenuName = 0;//注册窗口类RegisterClass(&wndclass);//创建窗口实列HWND hWndGet = CreateWindow(_T("窗体1"), _T("接收窗"), WS_OVERLAPPEDWINDOW, 100, 100, 500, 400, 0, 0, hInstance, 0);//显示窗口ShowWindow(hWndGet, SW_SHOW);WNDCLASS wndclass1;wndclass1.lpfnWndProc = WindowProcSend;//lpfnWndProc参数就是用来设置你用哪个WindowProc来处理消息,前面我说过,我们只要不更改回调函数的返回值和参数的类型和顺序,就可以随意设置函数的名字,那为什么系统可以找到我们用的回调函数呢,对的,就是通过lpfnWndProc传进去的,它是一个函数指针,也就是它里面保存的是我们定义的WindowProc的入口地址,使用很简单,我们只需要把函数的名字传给它就可以了。wndclass1.cbClsExtra = 0;wndclass1.cbWndExtra = 0;wndclass1.style = CS_HREDRAW | CS_VREDRAW;wndclass1.lpszClassName = _T("窗体2");wndclass1.hInstance = hInstance;wndclass1.hCursor = LoadCursor(NULL, IDC_ARROW);wndclass1.hIcon = 0;wndclass1.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);wndclass1.lpszMenuName = 0;//注册窗口类RegisterClass(&wndclass1);//创建窗口实列HWND hWndS = CreateWindow(_T("窗体2"), _T("发送窗"), WS_OVERLAPPEDWINDOW, 100, 100, 500, 400, 0, 0, hInstance, 0);//显示窗口ShowWindow(hWndS, SW_SHOW);//消息循环MSG msg;while (GetMessage(&msg, 0, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return 0;}//定义收窗口处理函数LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM IParam){switch (uMsg){case WM_CLOSE:{DestroyWindow(hwnd);}break;default:return DefWindowProc(hwnd, uMsg, wParam, IParam);}return 0;}LRESULT CALLBACK WindowProcSend(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM IParam){switch (uMsg){case WM_CLOSE:PostQuitMessage(0);break;case WM_CHAR:{MessageBox(hwnd, _T("确定关闭接收窗?"), _T("警告"), MB_OK);HWND hWndG = ::FindWindow(NULL, _T("接收窗"));if (hWndG != NULL){::SendMessage(hWndG, WM_CLOSE, 0, 0);}}break;default:return DefWindowProc(hwnd, uMsg, wParam, IParam);}return 0;}


原创粉丝点击