You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
3.1 KiB
117 lines
3.1 KiB
#include <windows.h>
|
|
#include <tchar.h>
|
|
|
|
|
|
LRESULT CALLBACK windowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
switch(msg)
|
|
{
|
|
case WM_SIZE:
|
|
break;
|
|
case WM_CLOSE:
|
|
case WM_DESTROY:
|
|
PostQuitMessage(0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return DefWindowProc( hWnd, msg, wParam, lParam );
|
|
}
|
|
|
|
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
|
|
{
|
|
// 1 注册窗口类
|
|
::WNDCLASSEXA winClass;
|
|
winClass.lpszClassName = "Raster";
|
|
winClass.cbSize = sizeof(::WNDCLASSEX);
|
|
winClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_DBLCLKS;
|
|
winClass.lpfnWndProc = windowProc;
|
|
winClass.hInstance = hInstance;
|
|
winClass.hIcon = 0;
|
|
winClass.hIconSm = 0;
|
|
winClass.hCursor = LoadCursor(NULL, IDC_ARROW);
|
|
winClass.hbrBackground = (HBRUSH)(BLACK_BRUSH);
|
|
winClass.lpszMenuName = NULL;
|
|
winClass.cbClsExtra = 0;
|
|
winClass.cbWndExtra = 0;
|
|
RegisterClassExA(&winClass);
|
|
|
|
// 2 创建窗口
|
|
HWND hWnd = CreateWindowExA(
|
|
NULL,
|
|
"Raster",
|
|
"Raster",
|
|
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
|
|
0,
|
|
0,
|
|
480,
|
|
320,
|
|
0,
|
|
0,
|
|
hInstance,
|
|
0
|
|
);
|
|
|
|
UpdateWindow( hWnd );
|
|
ShowWindow(hWnd,SW_SHOW);
|
|
|
|
RECT rt = {0};
|
|
GetClientRect(hWnd,&rt);
|
|
|
|
int width = rt.right - rt.left;
|
|
int height = rt.bottom - rt.top;
|
|
void* buffer = 0;
|
|
|
|
HDC hDC = GetDC(hWnd);
|
|
HDC hMem = ::CreateCompatibleDC(hDC);
|
|
|
|
|
|
|
|
BITMAPINFO bmpInfor;
|
|
bmpInfor.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
|
bmpInfor.bmiHeader.biWidth = width;
|
|
bmpInfor.bmiHeader.biHeight = height;
|
|
bmpInfor.bmiHeader.biPlanes = 1;
|
|
bmpInfor.bmiHeader.biBitCount = 32;
|
|
bmpInfor.bmiHeader.biCompression = BI_RGB;
|
|
bmpInfor.bmiHeader.biSizeImage = 0;
|
|
bmpInfor.bmiHeader.biXPelsPerMeter = 0;
|
|
bmpInfor.bmiHeader.biYPelsPerMeter = 0;
|
|
bmpInfor.bmiHeader.biClrUsed = 0;
|
|
bmpInfor.bmiHeader.biClrImportant = 0;
|
|
|
|
HBITMAP hBmp = CreateDIBSection(hDC,&bmpInfor,DIB_RGB_COLORS,(void**)&buffer,0,0);
|
|
SelectObject(hMem,hBmp);
|
|
|
|
|
|
memset(buffer,0,width * height * 4);
|
|
MSG msg = {0};
|
|
while(true)
|
|
{
|
|
if (msg.message == WM_DESTROY
|
|
||msg.message == WM_CLOSE
|
|
||msg.message == WM_QUIT)
|
|
{
|
|
break;
|
|
}
|
|
if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
|
|
{
|
|
TranslateMessage( &msg );
|
|
DispatchMessage( &msg );
|
|
}
|
|
|
|
memset(buffer,0,width * height * 4);
|
|
//! 修改其中一部分
|
|
unsigned char* rgba = (unsigned char*)buffer;
|
|
int pitch = width * 4;
|
|
|
|
memset(rgba + pitch * 10,255, pitch);
|
|
|
|
|
|
BitBlt(hDC,0,0,width,height,hMem,0,0,SRCCOPY);
|
|
|
|
}
|
|
|
|
return 0;
|
|
}
|