//----------------------------------------------------------------
// 本课程由siki开发,获取更多游戏开发视频教程,请关注siki的微信公众号 : devsiki [11/13/2015 devsiki]
//----------------------------------------------------------------
#include <windows.h>
#pragma comment(lib,"Msimg32.lib")
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lParam);
//hInstance 实例句柄,每一个应用程序都是有一个应用程序的实例句柄 (唯一的)
//lpCmdLine 命令行的参数
//nShowCmd 用来指定窗口如何显示,最大化,还是最小化
int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd) {
//MessageBox(NULL, L"Hello 你好 windows", L"这个是标题", 0);//msdn
//1,设计窗口
WNDCLASSEX wndClass = {};
wndClass.cbSize = sizeof(WNDCLASSEX);
wndClass.lpszClassName = L"myclassname";
wndClass.lpfnWndProc = WndProc;
wndClass.hInstance = hInstance;
//2,注册窗口
if (RegisterClassEx(&wndClass) == false) {
return -1;
}
//3,创建窗口 hwnd是我们创建出来的一个窗口句柄 就是这个窗口的身份证号
HWND hwnd= CreateWindow(L"myclassname", L"跟siki老师创建的第一个窗口", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 480, 852, NULL, NULL, hInstance, NULL);
//4,显示窗口
ShowWindow(hwnd, nShowCmd);
UpdateWindow(hwnd);
//绘图1,拿到画图设备环境(拿到画布)DC
HDC hdc=GetDC(hwnd);// hdc的大小 跟窗口保持一致
HDC mdc = CreateCompatibleDC(hdc);// mdc大小不确定
HDC bufdc = CreateCompatibleDC(hdc);//bufdc大小不确定
HBITMAP whiteBmp = CreateCompatibleBitmap(hdc, 480, 852);
SelectObject(mdc, whiteBmp);
//绘图2,拿到图片
HBITMAP hBG = (HBITMAP)LoadImage(NULL, L"image/background.bmp", IMAGE_BITMAP, 480, 852, LR_LOADFROMFILE);
HBITMAP hTitle =(HBITMAP) LoadImage(NULL, L"image/title.bmp", IMAGE_BITMAP, 429, 84, LR_LOADFROMFILE);
SelectObject(bufdc, hBG);//先把图片放在中间层//bufdc的大小跟图片保持一直
//然后把中间层的东西直接拿到hdc上
BitBlt(mdc, 0, 0, 480, 852, bufdc, 0, 0, SRCCOPY);
SelectObject(bufdc, hTitle);
//BitBlt(mdc, 20, 50, 429, 84, bufdc, 0, 0, SRCCOPY);
TransparentBlt(mdc, 20, 50, 429, 84, bufdc, 0, 0, 429, 84, RGB(0, 0, 0));
BitBlt(hdc, 0, 0, 480, 852, mdc, 0, 0, SRCCOPY);
DeleteDC(bufdc);
DeleteDC(mdc);
ReleaseDC(hwnd, hdc);
//5,处理消息
MSG msg = { 0 };
while (msg.message!=WM_QUIT)//当我们去到了一个退出的消息的时候,退出while循环
{
if (PeekMessage(&msg, 0, NULL, NULL, PM_REMOVE)) {// true取得消息 false 没有取得消息
TranslateMessage(&msg);
DispatchMessage(&msg);//交给 wndproc进行处理
}
}
//注销窗口
UnregisterClass(L"myclassname", hInstance);
return 0;
}
//用来处理窗口的事件(比如 键盘按键 鼠标事件 窗口关闭)
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lParam) {
switch (message)
{
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
MessageBox(NULL, L"检测到鼠标事件", L"这个是标题", 0);
break;
case WM_KEYDOWN://键盘按键按下
MessageBox(NULL, L"某个按键被按下了", L"这个是标题", 0);
break;
case WM_DESTROY://当我们点击窗口上的关闭按钮的时候,会收到这个destory的消息
//我们可以做一些窗口关闭之前的处理工作
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, message, wparam, lParam);
}
return 0;
}
// 本课程由siki开发,获取更多游戏开发视频教程,请关注siki的微信公众号 : devsiki [11/13/2015 devsiki]
//----------------------------------------------------------------
#include <windows.h>
#pragma comment(lib,"Msimg32.lib")
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lParam);
//hInstance 实例句柄,每一个应用程序都是有一个应用程序的实例句柄 (唯一的)
//lpCmdLine 命令行的参数
//nShowCmd 用来指定窗口如何显示,最大化,还是最小化
int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd) {
//MessageBox(NULL, L"Hello 你好 windows", L"这个是标题", 0);//msdn
//1,设计窗口
WNDCLASSEX wndClass = {};
wndClass.cbSize = sizeof(WNDCLASSEX);
wndClass.lpszClassName = L"myclassname";
wndClass.lpfnWndProc = WndProc;
wndClass.hInstance = hInstance;
//2,注册窗口
if (RegisterClassEx(&wndClass) == false) {
return -1;
}
//3,创建窗口 hwnd是我们创建出来的一个窗口句柄 就是这个窗口的身份证号
HWND hwnd= CreateWindow(L"myclassname", L"跟siki老师创建的第一个窗口", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 480, 852, NULL, NULL, hInstance, NULL);
//4,显示窗口
ShowWindow(hwnd, nShowCmd);
UpdateWindow(hwnd);
//绘图1,拿到画图设备环境(拿到画布)DC
HDC hdc=GetDC(hwnd);// hdc的大小 跟窗口保持一致
HDC mdc = CreateCompatibleDC(hdc);// mdc大小不确定
HDC bufdc = CreateCompatibleDC(hdc);//bufdc大小不确定
HBITMAP whiteBmp = CreateCompatibleBitmap(hdc, 480, 852);
SelectObject(mdc, whiteBmp);
//绘图2,拿到图片
HBITMAP hBG = (HBITMAP)LoadImage(NULL, L"image/background.bmp", IMAGE_BITMAP, 480, 852, LR_LOADFROMFILE);
HBITMAP hTitle =(HBITMAP) LoadImage(NULL, L"image/title.bmp", IMAGE_BITMAP, 429, 84, LR_LOADFROMFILE);
SelectObject(bufdc, hBG);//先把图片放在中间层//bufdc的大小跟图片保持一直
//然后把中间层的东西直接拿到hdc上
BitBlt(mdc, 0, 0, 480, 852, bufdc, 0, 0, SRCCOPY);
SelectObject(bufdc, hTitle);
//BitBlt(mdc, 20, 50, 429, 84, bufdc, 0, 0, SRCCOPY);
TransparentBlt(mdc, 20, 50, 429, 84, bufdc, 0, 0, 429, 84, RGB(0, 0, 0));
BitBlt(hdc, 0, 0, 480, 852, mdc, 0, 0, SRCCOPY);
DeleteDC(bufdc);
DeleteDC(mdc);
ReleaseDC(hwnd, hdc);
//5,处理消息
MSG msg = { 0 };
while (msg.message!=WM_QUIT)//当我们去到了一个退出的消息的时候,退出while循环
{
if (PeekMessage(&msg, 0, NULL, NULL, PM_REMOVE)) {// true取得消息 false 没有取得消息
TranslateMessage(&msg);
DispatchMessage(&msg);//交给 wndproc进行处理
}
}
//注销窗口
UnregisterClass(L"myclassname", hInstance);
return 0;
}
//用来处理窗口的事件(比如 键盘按键 鼠标事件 窗口关闭)
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lParam) {
switch (message)
{
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
MessageBox(NULL, L"检测到鼠标事件", L"这个是标题", 0);
break;
case WM_KEYDOWN://键盘按键按下
MessageBox(NULL, L"某个按键被按下了", L"这个是标题", 0);
break;
case WM_DESTROY://当我们点击窗口上的关闭按钮的时候,会收到这个destory的消息
//我们可以做一些窗口关闭之前的处理工作
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, message, wparam, lParam);
}
return 0;
}