c# 返回指点坐标点颜色的代码,请指教

c# 返回指点坐标点颜色的代码,请指教,第1张

//我给你加个注释吧

//获取屏幕指定点的颜色

public Color GetColor(int x, int y)

{

int hdc = GetDC(IntPtr Zero ); //获取屏幕HDC句柄

uint pixel = GetPixel(hdc, x, y); //获取屏幕上(x,y)点的颜色值,这个值是一个32位无符号整数。

ReleaseDC(IntPtrZero, hdc); //释放HDC句柄

//ColorFromArgb(red颜色分量,green颜色分量,blue颜色分量)

//pixel & 0x000000FF取低8位red色颜色分量

//(pixel & 0x0000FF00) >> 8 去8-16为green颜色分量,并且右移8位

//其他类似

Color color = ColorFromArgb((int)(pixel & 0x000000FF), (int)(pixel & 0x0000FF00) >> 8, (int)(pixel & 0x00FF0000) >> 16);

return color;

}

DC的句柄和窗口的句柄是不同的,不能混用。

要获取DC句柄,首先要看你在那个函数里面(有些函数有DC指针参数,有些窗口类成员函数可以直接访问DC)

举例:

CClientDC dc(this);

HDC hDC = dcGetSafeHdc();

C语言经典小程序

用vs,vc都可以正常运行

#include

#include

#include

// 获取控制台窗口句柄

HWND GetConsoleHwnd(void)

{

#define MY_BUFSIZE 1024 // Buffer size for console window titles

HWND hwndFound; // This is what is returned to the caller

char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated

char pszOldWindowTitle[MY_BUFSIZE]; // Contains original

GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);//获取控制台标题存入pszOldWindowTitle中

//设置控制台的标题为 时间数 进程ID

wsprintf(pszNewWindowTitle,"%d/%d",//把获取的数目,和当前进程ID输出到缓冲区pszNewwindowtitle中

GetTickCount(),//用于获取 *** 作系统启动后的毫秒数

GetCurrentProcessId());//获取当前进程ID

SetConsoleTitle(pszNewWindowTitle);//更改控制台的标题为新内容

Sleep(40);

hwndFound=FindWindow(NULL, pszNewWindowTitle);//获取控制台的HWND号

SetConsoleTitle(pszOldWindowTitle);//更改控制台的标题为原始内容

return(hwndFound);//返回句柄

}

{

HWND hWnd=GetConsoleHwnd();//获取控制台窗口句柄,用于设置画笔颜色

HDC hDC=GetDC(hWnd);

COORD dwSize;//记录窗体大小,用于设定坐标轴远点

HPEN hNewPen=CreatePen(PS_SOLID,1,RGB(255,0,0));//创建画笔对象

HPEN hOldPen=(HPEN)SelectObject(hDC,hNewPen);//选取画笔对象进行绘图

CONSOLE_SCREEN_BUFFER_INFO bInfo; // 窗口信息

HANDLE Hout=GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台句柄

GetConsoleScreenBufferInfo(Hout, &bInfo );//获取控制台信息

dwSize=bInfodwMaximumWindowSize ;//获取窗口大小,此时获得的是字符模式下

//从字符到图像放大坐标轴8倍

dwSizeX =8;

dwSizeY=8;

SetBkMode(hDC, TRANSPARENT);SetTextColor(hDC,255255);

//绘制X轴各个特殊坐标

TextOut(hDC,dwSizeX-15,dwSizeY/2-15,"X",1);

//Arc(hDC,100,100,300,300,350,500,350,500);//画圆 其中hDC表示画图句柄,100,100,300,300表示所使用的矩形区域,350,500表示画弧线的起点,350,500表明画弧线的终点 ;

//绘制Y轴各个特殊坐标

TextOut(hDC,dwSizeX/2,0,"Y",1);

MoveToEx(hDC,0,dwSizeY /2,NULL);

LineTo(hDC,dwSizeX,dwSizeY/2);

MoveToEx(hDC,dwSizeX/2,0,NULL);

LineTo(hDC,dwSizeX/2,dwSizeY);

ReleaseDC(hWnd,hDC);

}

void draw(double p)

{

int i;

double x,y;

HWND hWnd=GetConsoleHwnd();//获取控制台窗口句柄,用于设置画笔颜色

HDC hDC=GetDC(hWnd);

COORD dwSize;//记录窗体大小,用于设定坐标轴远点

HPEN hNewPen=CreatePen(PS_SOLID,1,RGB(255,0,0));//创建画笔对象

HPEN hOldPen=(HPEN)SelectObject(hDC,hNewPen);//选取画笔对象进行绘图

CONSOLE_SCREEN_BUFFER_INFO bInfo; // 窗口信息

HANDLE Hout=GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台句柄

GetConsoleScreenBufferInfo(Hout, &bInfo );//获取控制台信息

dwSize=bInfodwMaximumWindowSize ;//获取窗口大小,此时获得的是字符模式下

//从字符到图像放大坐标轴8倍

dwSizeX =8;

dwSizeY=8;

//MoveToEx(hDC,0,dwSizeY/2,NULL);

for(i=-180;i

{

x=16pow(sin(i31415926/180),30)p;

y=(13cos(i31415926/180)-5cos(2i31415926/180)-2cos(3i31415926/180)-cos(4i31415926/180))p;

x=(x+16)dwSizeX/32/2+dwSizeX/4;

y=-y/16dwSizeY/23+dwSizeY/2;

x=x;

y=y;

MoveToEx(hDC,x,y,NULL);

LineTo(hDC,x+1,y+1);

}

}

void main()

{

double p;

for(p=06;p

draw(p);

system("PAUSE");

}

HDC hDc,memDc;

hDc = GetDC(GetDesktopWindow()); //取桌面的设备 hdc

memDc = CreateCompatibleDC(hDc); //创建与hdc(即桌面)兼容的设备memDc

HBITMAP hBitMap;

hBitMap = CreateCompatibleBitmap(hDc,with,hight); //创建与桌面兼容的画布

SelectObject(memDc,hBitMap); //关联 设备 和 画布

BitBlt(memDc,0,0,with,hight,hDc,0,0,SRCCOPY); //把桌面往兼容设备里复制

一个设备(笔,画刷) ,再准备一张画布(一个内存空间), 就可以作画了 要真正的得到一个图, 总要有东西把原图放进去吧 所以有了, 兼容的设备和画布

获取句柄不一定要用 FindWindow ,还可以枚举:

Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long

Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Private Const GW_HWNDFIRST = 0

Private Const GW_HWNDNEXT = 2

Private Sub Command1_Click()

Dim lngHwnd As Long, ret As Long

Dim s As String 255

Dim sName As String

lngHwnd = GetWindow(Mehwnd, GW_HWNDFIRST)

Do While lngHwnd

ret = GetWindowText(lngHwnd, s, 255)

sName = Blank(s)

If InStr(sName, "记事本") <> 0 Then '这里“记事本”替换成程序标题相同的部分

'这里写 将句柄加入数组的相关代码

End If

lngHwnd = GetWindow(lngHwnd, GW_HWNDNEXT)

Loop

End Sub

Public Function Blank(ByVal szString As String) As String

Dim l As Integer

l = InStr(szString, Chr(0))

If l > 0 Then

Blank = Left(szString, l - 1)

Else

Blank = szString

End If

End Function

以上就是关于c# 返回指点坐标点颜色的代码,请指教全部的内容,包括:c# 返回指点坐标点颜色的代码,请指教、MFC中如何获取窗口句柄然后使用,内有具体函数、C语言经典小程序,用C语言来教大家撩妹子啦,速度来!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10625100.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-10
下一篇2023-05-10

发表评论

登录后才能评论

评论列表(0条)

    保存