Код который рисует обычную линию на форме с получением дескриптор этой формы
Категория: C/C++
2012-02-16 16:13:10
code: #c
#include <windows.h> #define RED RGB(255,0,0) #define GRN RGB(0,255,0) #define BLU RGB(0,0,255) #define BLK RGB(0,0,0) #define WHT RGB(255,255,255) HPEN getPen(int iPEN_STYLE, int iPEN_SIZE, int iCOLORREF); BOOL SetPoint(HDC hDC, HPEN hPen, COORD PNT); BOOL PlotLine(HDC hDC, HPEN hPen, COORD BGN, COORD END); BOOL PlotRect(HDC hDC, HPEN hPen, COORD BGN, COORD END); BOOL PlotCirc(HDC hDC, HPEN hPen, COORD BGN, COORD END); COORD setCordScale(COORD POS, RECT pRECT); int main() { HWND hWnd = GetForegroundWindow(); HPEN RPEN = getPen(PS_SOLID, 2, RED); HPEN GPEN = getPen(PS_SOLID, 2, GRN); HPEN BPEN = getPen(PS_SOLID, 2, BLU); HPEN WPEN = getPen(PS_SOLID, 3, WHT); RECT pRECT= {0}; COORD POS = {0}; COORD BGN = setCordScale(POS,pRECT); GetWindowRect(hWnd,&pRECT); HDC hDC = GetWindowDC(hWnd); if(hDC) { SetBkMode(hDC,TRANSPARENT); SetPoint (hDC, WPEN, BGN); POS.X = BGN.X + 50; POS.Y = BGN.Y + 100; PlotRect(hDC, BPEN, BGN, POS); PlotLine(hDC, RPEN, BGN, POS); SetPoint (hDC, WPEN, BGN); BGN = POS; POS.X = BGN.X + 100; POS.Y = BGN.Y + 100; PlotCirc(hDC, GPEN, BGN, POS); } system("pause"); return 0; } HPEN getPen(int iPEN_STYLE, int iPEN_SIZE, int iCOLORREF) { return CreatePen(iPEN_STYLE, iPEN_SIZE, iCOLORREF); } BOOL SetPoint(HDC hDC, HPEN hPen, COORD PNT) { EXTLOGPEN pINFO; GetObject(hPen,sizeof(EXTLOGPEN),&pINFO); SelectObject(hDC,hPen); return Ellipse ( hDC, PNT.X - pINFO.elpWidth, PNT.Y + pINFO.elpWidth, PNT.X + pINFO.elpWidth, PNT.Y - pINFO.elpWidth ); } BOOL PlotLine(HDC hDC, HPEN hPen, COORD BGN, COORD END) { SelectObject(hDC,hPen); MoveToEx(hDC,BGN.X,BGN.Y,NULL); return LineTo( hDC,END.X,END.Y); } BOOL PlotRect(HDC hDC, HPEN hPen, COORD BGN, COORD END) { SelectObject(hDC,hPen); return Rectangle(hDC,BGN.X, BGN.Y, END.X, END.Y); } BOOL PlotCirc(HDC hDC, HPEN hPen, COORD BGN, COORD END) { SelectObject(hDC,hPen); return Ellipse(hDC,BGN.X, BGN.Y, END.X, END.Y); } COORD setCordScale(COORD POS, RECT pRECT) { if(POS.X == 0) POS.X = 1; if(POS.Y == 0) POS.Y = 1; int nROWS = 25; int nCOLS = 80; double CX = (pRECT.right - pRECT.left)/nCOLS; double CY = (pRECT.bottom - pRECT.top)/nROWS; //При текстовом режиме(text mode) экран делится на ячейки //(80 или 40 колонок в ширину и 25 строк в высоту) POS.X *= CX; POS.Y *= CY; int xBORDER = GetSystemMetrics(SM_CXBORDER);//Ширина границы окна int yBORDER = GetSystemMetrics(SM_CYMENU); //Высота заголовка окна ~= высоте строк меню int xDRAG = GetSystemMetrics(SM_CXDRAG); //Число пикселей на гориз дрожение мыши int yDRAG = GetSystemMetrics(SM_CYDRAG); //Число пикселей на вертик дрожение мыши POS.X += xBORDER + xDRAG;//Ширина границы окна + число пикселей на дрожение мыши POS.Y += yBORDER + yDRAG; return POS; }
автор: -=ЮрА=-
Поделиться: