Windows应用程序窗口的创建

//----------------------------------------------------------------
// 本课程由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;








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值