实习随手记-win32创建窗口操作
2017-05-31 17:54
274 查看
任务:
<写一个窗口程序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;
}
<写一个窗口程序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;
}
相关文章推荐
- win32窗口的创建,GDI简单的绘图操作
- 实习随手记-win32进程操作
- VC win32 Application SDK创建窗口Demo
- win32 的DLL中创建windows窗口
- win32窗口创建六部曲
- win32创建窗口流程
- win32汇编--创建窗口程序(RadAsm)
- 用VS创建一个win32窗口,编译运行都可以,但那个窗口没有显示出来(孙鑫老师第一课问题)
- win32 简单窗口的创建及参数介绍
- 从win32控制台创建窗口过程
- OpenGL1-创建窗口(建立Win32的OpenGL开发环境 )(代码上传)
- 【Direct3D9】用D3D9实现一个简单的Galgame #1 创建Win32窗口
- win32sdk学习-创建一个对话框窗口
- Win32下创建异形窗口
- 创建一个不显示窗口的Win32程序
- [Win32]创建模态窗口
- win32常用的消息WM_CREATE - 窗口创建成功,但还未显示之前
- Windows下游戏制作(1)---win32窗口创建(1)
- Win32应用程序中创建控制台窗口
- win32 创建窗口