问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请问类似http://www.weiphone.com/ ,屏幕左中位置的那个1-6的动态广告板块是怎么制作的呢?

发布网友 发布时间:2022-05-05 18:33

我来回答

1个回答

热心网友 时间:2023-10-09 07:43

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;

namespace LiBo.ColorPicker
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
// 桌面工作区的尺寸
Size workingArea;
// Form 的初始位置和在左下角,右下角的位置
Point formLoc, ptLeftBottom, ptRightBottom;

private System.Windows.Forms.Label lblColor;
private System.Windows.Forms.TextBox txtArgb;
private System.Windows.Forms.Timer tmr;
private System.Windows.Forms.ToolTip tip;
private System.ComponentModel.IContainer components;

public Form1()
{
InitializeComponent();

this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
this.StartPosition = FormStartPosition.CenterScreen;

Rectangle rect = SystemInformation.WorkingArea;
workingArea = new Size(rect.Width, rect.Height);
ptLeftBottom = new Point(0, workingArea.Height - this.Height);
ptRightBottom = new Point(workingArea.Width - this.Width,
workingArea.Height - this.Height);

String tipMsg = "在窗体空白处双击鼠标左键开始取色,按ESC键确定颜色";
tip.SetToolTip(this, tipMsg);
tip.SetToolTip(lblColor, tipMsg);
tip.SetToolTip(txtArgb, tipMsg);
}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.lblColor = new System.Windows.Forms.Label();
this.tmr = new System.Windows.Forms.Timer(this.components);
this.txtArgb = new System.Windows.Forms.TextBox();
this.tip = new System.Windows.Forms.ToolTip(this.components);
this.SuspendLayout();
//
// lblColor
//
this.lblColor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.lblColor.Location = new System.Drawing.Point(8, 8);
this.lblColor.Name = "lblColor";
this.lblColor.TabIndex = 0;
//
// tmr
//
this.tmr.Tick += new System.EventHandler(this.tmr_Tick);
//
// txtArgb
//
this.txtArgb.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.txtArgb.Font = new System.Drawing.Font("Arial", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.txtArgb.Location = new System.Drawing.Point(8, 40);
this.txtArgb.Name = "txtArgb";
this.txtArgb.TabIndex = 1;
this.txtArgb.Text = "";
this.txtArgb.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtArgb_KeyPress);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(115, 70);
this.Controls.Add(this.txtArgb);
this.Controls.Add(this.lblColor);
this.Name = "Form1";
this.Text = "屏幕取色(upto)";
this.DoubleClick += new System.EventHandler(this.Form1_DoubleClick);
this.MouseEnter += new System.EventHandler(this.Form1_MouseEnter);
this.ResumeLayout(false);

}
#endregion

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

[ DllImport ( "gdi32.dll" ) ]
private static extern bool BitBlt (
IntPtr hdcDest, // 目标设备的句柄
int nXDest, // 目标对象的左上角的X坐标
int nYDest, // 目标对象的左上角的X坐标
int nWidth, // 目标对象的矩形的宽度
int nHeight, // 目标对象的矩形的长度
IntPtr hdcSrc, // 源设备的句柄
int nXSrc, // 源对象的左上角的X坐标
int nYSrc, // 源对象的左上角的X坐标
int dwRop // 光栅的操作值
);

[ DllImport ( "gdi32.dll" ) ]
private static extern IntPtr CreateDC (
string lpszDriver, // 驱动名称
string lpszDevice, // 设备名称
string lpszOutput, // 无用,可以设定位"NULL"
IntPtr lpInitData // 任意的打印机数据
);

private void Form1_DoubleClick(object sender, EventArgs e)
{
formLoc = this.Location;
this.Location = ptRightBottom;
this.TopMost = true;
tmr.Enabled = true;
}

private void tmr_Tick(object sender, EventArgs e)

{

// 创建显示器的DC

IntPtr hdlDisplay = CreateDC("DISPLAY", null, null, IntPtr.Zero);

// 从指定设备的句柄创建新的 Graphics 对象

Graphics gfxDisplay = Graphics.FromHdc(hdlDisplay);

// 创建只有一个象素大小的 Bitmap 对象

Bitmap bmp = new Bitmap(1, 1, gfxDisplay);

// 从指定 Image 对象创建新的 Graphics 对象

Graphics gfxBmp = Graphics.FromImage(bmp);

// 获得屏幕的句柄

IntPtr hdlScreen = gfxDisplay.GetHdc();

// 获得位图的句柄

IntPtr hdlBmp = gfxBmp.GetHdc();

// 把当前屏幕中鼠标指针所在位置的一个象素拷贝到位图中

BitBlt(hdlBmp, 0, 0, 1, 1, hdlScreen, MousePosition.X, MousePosition.Y, 13369376);

// 释放屏幕句柄

gfxDisplay.ReleaseHdc(hdlScreen);

// 释放位图句柄

gfxBmp.ReleaseHdc(hdlBmp);

lblColor.BackColor = bmp.GetPixel(0, 0); // 获取像素的颜色

txtArgb.Text = "0x" + lblColor.BackColor.ToArgb().ToString("x").ToUpper();

gfxDisplay.Dispose();
gfxBmp.Dispose();

bmp.Dispose(); // 释放 bmp 所使用的资源

}

private void txtArgb_KeyPress(object sender, KeyPressEventArgs e)
{
// 当按下ESC键时,确定所取的颜色ARGB值
// 注意:只有当窗体处于激活状态时才有效
if (e.KeyChar == (char)Keys.Escape)
{
tmr.Enabled = false;
this.Location = formLoc;
this.TopMost = false;
txtArgb.SelectAll();
}
}

private void Form1_MouseEnter(object sender, EventArgs e)
{
if (this.Location == ptLeftBottom) //窗体在左下角
{
this.Location = ptRightBottom;
}
else if (this.Location == ptRightBottom) // 窗体在右下角
{
this.Location = ptLeftBottom;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女人梦见蛇的七大预兆解梦 PHOTOSHOP 怎么把眼睛点大 这些月销量10000+的防晒霜,是噱头还是真的好用? 大宝水凝保湿防晒露适合哪些肤质的人使用? 拥有人口过亿的国家最多的大洲是( )A.非洲B.亚洲C.欧洲D.大洋 世界国家最多的大洲是:( ) A.亚洲 B.大洋州 C.非洲 D.欧 拥有人口过亿的国家最多的大洲是:( ) A.非洲 B.亚洲 C.欧洲 D.大洋 餐厅一般中餐都有哪些摆台要求和标准 如何做味道正宗的中餐? 河南文科跟理科高考分数线相差多少 求:在Asp中(用正则表达式)获取文章中的图片地址 粤语中‘什么’怎么讲 华为p9 plus不分主副卡吗 华为p9 plus能同时放两张电信卡吗 华为p9 plus 怎么插移动4g sm卡 红米k20pro和华为mate9pro二手值多少? 小米手机只能进入fastboot模式怎么刷机 如何清除rman catalog记录 板鞋由于长时间没穿,鞋边发黄怎么办???怎么去除,使其变回原样呢??? 资金成本是一种机会成本,它是投资人期望的的收益率这句话对吗 机会成本率是什么?怎么算? 机会成本的运算公式是什么? 机会成本怎么计算公式? 1.5V电池给2.7V500F超级电容充电,能充满吗?大约需要多久?用3.6V给超级电容充电可以吗 2.7V3000F法拉电容怎么充电?充电电压,电流,时间,各是多少啊? 新三板和主板有什么区别 西安住房公积金可以不交吗?一次能够补交几个月的? 使用天然气灶,是先点火还是先开鼓风机? 西安市住房公积金上面显示的余额是自己交的还是单位加自己的 西安市无工作单位人员怎样缴纳住房公积金 股票市场什么时候开始有定向增发的 股票增发后,是否股价要重新计算? 如是,怎么计算? 宝钢股份吸收合并武钢股份,持有武钢股份的怎么操作 高压锅是否利用大气压工作 电脑宽频插座是什么东西? 高压锅煮饭属于什么物理原理?是大气压强吗还是压强还是液体压强? 下列不是利用大气压工作的是( ) A、高压锅煮饭 B、吸饮料 C、滴管吸液体 D、吸尘器吸收灰尘 请教,宽频电视插座是什么意思? 宽带插座如何接线? 网络插座如何接线,宽带插座怎么接? 宽带插座如何接线 关于有线电视的宽频与普通插座的区别问题 宽带插座面板怎么接线 宽频电视插座什么意思 TV电视插座和宽频电视插座有什么区别?? 我想搞肉兔养殖,请养兔高手指教下养肉兔每只肉兔的利润有多少? Nova2s怎么设置自定义动态壁纸 可是点进去更换锁屏密码和关闭锁屏密码 没有您说的那些啊 那华为nova2s是不能自定义设置锁屏了么 修改什么名字好? 修改什么名字好