不停的画框的小程序

#include <windows.h>
#include <tchar.h>
#include "resource.h"

#define NUMLINES ((int) (sizeof devcaps / sizeof devcaps [0]))

struct
{
     int     iIndex ;
     TCHAR * szLabel ;
     TCHAR * szDesc ;
}

devcaps [] =
{
     HORZSIZE,      TEXT ("HORZSIZE"),     TEXT ("Width in millimeters:"),
     VERTSIZE,      TEXT ("VERTSIZE"),     TEXT ("Height in millimeters:"),
     HORZRES,       TEXT ("HORZRES"),      TEXT ("Width in pixels:"),
     VERTRES,       TEXT ("VERTRES"),      TEXT ("Height in raster lines:"),
     BITSPIXEL,     TEXT ("BITSPIXEL"),    TEXT ("Color bits per pixel:"),
     PLANES,        TEXT ("PLANES"),       TEXT ("Number of color planes:"),
     NUMBRUSHES,    TEXT ("NUMBRUSHES"),   TEXT ("Number of device brushes:"),
     NUMPENS,       TEXT ("NUMPENS"),      TEXT ("Number of device pens:"),
     NUMMARKERS,    TEXT ("NUMMARKERS"),   TEXT ("Number of device markers:"),
     NUMFONTS,      TEXT ("NUMFONTS"),     TEXT ("Number of device fonts:"),
     NUMCOLORS,     TEXT ("NUMCOLORS"),    TEXT ("Number of device colors:"),
     PDEVICESIZE,   TEXT ("PDEVICESIZE"),  TEXT ("Size of device structure:"),
     ASPECTX,       TEXT ("ASPECTX"),      TEXT ("Relative width of pixel:"),
     ASPECTY,       TEXT ("ASPECTY"),      TEXT ("Relative height of pixel:"),
     ASPECTXY,      TEXT ("ASPECTXY"),     TEXT ("Relative diagonal of pixel:"),
     LOGPIXELSX,    TEXT ("LOGPIXELSX"),   TEXT ("Horizontal dots per inch:"),
     LOGPIXELSY,    TEXT ("LOGPIXELSY"),   TEXT ("Vertical dots per inch:"),
     SIZEPALETTE,   TEXT ("SIZEPALETTE"),  TEXT ("Number of palette entries:"),
     NUMRESERVED,   TEXT ("NUMRESERVED"),  TEXT ("Reserved palette entries:"),
     COLORRES,      TEXT ("COLORRES"),     TEXT ("Actual color resolution:")
} ;

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
void DrawRectangle(HWND hwnd);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int nCmdShow)
{
 TCHAR  szAppName[]  = _T("DevCaps");
 HWND  hwnd   = NULL;
 MSG   msg    = {0};
 WNDCLASS wndclass  = {0};

 wndclass.cbClsExtra  = 0;
 wndclass.cbWndExtra  = 0;
 wndclass.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);
 wndclass.hCursor  = ::LoadCursor(NULL, IDC_ARROW);
 wndclass.hIcon   = ::LoadIcon(NULL, IDI_APPLICATION);
 wndclass.hInstance  = hInstance;
 wndclass.lpfnWndProc = WndProc;
 wndclass.lpszClassName = szAppName;
 wndclass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU);
 wndclass.style   = CS_HREDRAW | CS_VREDRAW;

 if (!::RegisterClass(&wndclass))
 {
  ::MessageBox(NULL, _T("this programe require Win NT!"), szAppName, MB_ICONERROR);

  return 0;
 }

 HMENU hMenu = NULL;
 hMenu = ::LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1));

 hwnd = ::CreateWindow(szAppName, _T("Device Capture"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, hMenu, hInstance, NULL);

 ::ShowWindow(hwnd, nCmdShow);
 ::UpdateWindow(hwnd);

 while (true)
 {
  if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
  {
   if (msg.message == WM_QUIT)
   {
    break;
   }

   ::TranslateMessage(&msg);
   ::DispatchMessage(&msg);
  }
  else
  {
   DrawRectangle(hwnd);
  }
 }

 return msg.wParam;
}

void DrawRectangle(HWND hwnd)
{
 HBRUSH hBrush = NULL;
 HDC  hdc  = NULL;
 RECT rect = {0};

 int  cxClient = 0;
 int  cyClient = 0;

 ::GetClientRect(hwnd, &rect);
 cxClient = rect.right - rect.left;
 cyClient = rect.bottom - rect.top;

 ::SetRect(&rect, rand() % cxClient, rand() % cyClient, rand() % cxClient, rand() % cyClient);
 hBrush = ::CreateSolidBrush(RGB(rand() % 256, rand() % 256, rand() % 256));

 hdc = ::GetDC(hwnd);

 ::FillRect(hdc, &rect, hBrush);

 ::ReleaseDC(hwnd, hdc);
 ::DeleteObject(hBrush);
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 static int cxChar = 0;
 static int cxCaps = 0;
 static int cyChar = 0;
 
 int   i   = 0;
 TCHAR  szBuff[10] = _T("/0");
 HDC   hdc   = NULL;
 PAINTSTRUCT ps   = {0};
 TEXTMETRIC tm   = {0};

 switch (message)
 {
 case WM_CREATE:
  {
   hdc = ::GetDC(hwnd);
   ::GetTextMetrics(hdc, &tm);
   
   cxChar = tm.tmAveCharWidth;
   cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2;
   cyChar = tm.tmHeight + tm.tmExternalLeading;

   ::ReleaseDC(hwnd, hdc);
  }

  return 0;

 case WM_PAINT:
  {
   hdc = ::BeginPaint(hwnd, &ps);

   for (i = 0; i < NUMLINES; i++)
   {
    ::TextOut(hdc, 0, cyChar * i, devcaps[i].szLabel, lstrlen(devcaps[i].szLabel));
    ::TextOut(hdc, 14 * cxCaps, cyChar * i, devcaps[i].szDesc, lstrlen(devcaps[i].szDesc));

    ::SetTextAlign(hdc, TA_RIGHT | TA_TOP);
    ::TextOut(hdc, 14 * cxCaps + 35 * cxChar, cyChar * i, szBuff, wsprintf(szBuff, _T("%5d"), ::GetDeviceCaps(hdc, devcaps[i].iIndex)));
    ::SetTextAlign(hdc, TA_LEFT | TA_TOP);
   }

   ::SelectObject(hdc, ::GetStockObject(NULL_BRUSH));
   ::Rectangle(hdc, 0, 0, 100, 50);

   RECT rect;
   
   rect.left = 0;
   rect.top = 60;
   rect.bottom = 120;
   rect.right = 200;

   //::SelectObject(hdc, ::GetStockObject(GRAY_BRUSH));
   ::FrameRect(hdc, &rect, (HBRUSH)::GetStockObject(GRAY_BRUSH));

   rect.left = 0;
   rect.top = 130;
   rect.bottom = 200;
   rect.right = 400;


   //::FillRect(hdc, &rect, (HBRUSH)::GetStockObject(WHITE_BRUSH));
   ::InvertRect(hdc, &rect);

   ::EndPaint(hwnd, &ps);
  }
  
  return 0;

 case WM_DESTROY:
  {
   ::PostQuitMessage(0);
  }

  return 0;

 default:
  break;
 }

 return ::DefWindowProc(hwnd, message, wParam, lParam);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值