读书人

C#怎么使显示器变为镜像显示呢

发布时间: 2012-04-02 19:58:59 作者: rapoo

C#如何使显示器变为镜像显示呢?
如何用C#将显示器的图像变为镜像显示呢?就是好像是在镜子里看一样。

如果这个实现不了,那么如何使C#编写的整个窗体是镜像显示的呢?就是别的都正常,就C#窗体是镜像的(包括窗体中打开的任何文字、图片等都是镜像的)


最好能实现第一个要求,我想将C#软件做成自动运行的,进入系统后整个显示器变为镜像显示了。
搞了好几天,不知道怎么弄,相关资料也很少,希望高手能给个源码,分不够再加100分呵呵~~~~~~~ ^_^

[解决办法]
不是高手。

[解决办法]
貌似这个可以。
http://msdn.microsoft.com/en-us/library/ms812499.aspx
[解决办法]
改变显示器模式
[解决办法]
挺有趣的,楼主这是要干什么呢?
[解决办法]

完全不懂。
[解决办法]
镜像显示~~好想法..要不搜索下"C#镜片反射"
[解决办法]
或者搜索"C#镜面反射"
[解决办法]
powerstrip 也没这功能,不知某些显卡驱动有没

不然只能GDI绘,但控件多的话也是很麻烦
[解决办法]
- -# 建议楼主还是去汇编那问问做显示的有什么想法没!


额...字是反着的还真是麻烦,识别都没办法!


恩,要不楼主多弄几个镜子再反射一次.....唔....截屏也没法截...那是个幻灯片!主持人要不停的动....


靠...你们电视台还真是让人脑袋疼,就不好把那东西放电脑里,主持人手底下放个触摸板么...弄几张破纸有个蛋用啊!
[解决办法]
要操作 framebuffer 不然没戏 请给分谢谢
[解决办法]
HOHO 楼主一定是去找触摸板去了.....

这就跟我前几天去办事的时候一样,堂堂一个政府部门,我扫描个照片他居然给我用摄像头对着我的照片照相!我晕的不行啊....买不起相机还是买不起扫描仪
[解决办法]
我今天下午将一个CRT显示器的偏转线圈调换了一下,效果很好,但是我想用LCD显示器,很难啊,看来想用程序实现的难度很大,估计要涉及到显卡底层的很多东西,不懂,唉

哈哈,既然你都会弄偏转线圈了,你为何不把LCD拆出来,把背光灯弄下来,再把LCD屏换个方向就OK啦。几年前DIY投影也是找LCD拆背光灯换投影灯泡,前面加放大镜头,对了,此时LCD屏也是需要镜像的
[解决办法]
LZ你看把显示器倒过来放,然后再加一面镜子靠谱么?
[解决办法]
反转所有图像?貌似有些显卡里面有设置可以做到!
如果用c#实现要重新绘制界面,太麻烦了!
[解决办法]
显卡设定吧,找个专业点的显卡驱动就有这个选项的
[解决办法]
换个显卡吧,好像有的可以设置
[解决办法]
我建议找显卡 或我前面说的,把液晶屏拆出来反转下,可以请电脑城修显示器的帮忙
[解决办法]

探讨
引用:
我建议找显卡 或我前面说的,把液晶屏拆出来反转下,可以请电脑城修显示器的帮忙


拆出来那是不可能的
不知道你是否了解液晶显示器的成像原理,要使液晶画面翻转,需要改驱动板电路才行

[解决办法]
探讨

现在这个需求改变一下:
不水平翻转显示器,仅翻转该winform程序,如何做呢?
比如在窗体上加一个按钮,点击一下使该程序的所有窗体变为水平翻转状态的镜像显示,再点击一下恢复正常?

[解决办法]

类似这样.
Source可以被遮挡,但不能最小化或隐藏(不然就是一片黑),Mirror可以最大化放到全屏.
[解决办法]
直接把显示器倒过来或者设置屏幕旋转180度 最简单。
[解决办法]
探讨

引用:
引用:

现在这个需求改变一下:
不水平翻转显示器,仅翻转该winform程序,如何做呢?
比如在窗体上加一个按钮,点击一下使该程序的所有窗体变为水平翻转状态的镜像显示,再点击一下恢复正常?
改一下.
一个正常窗体一个镜像的话做起来不难.




您的这段代码也无法完成我的需求
现在要求简单点:如何使窗体中……


[解决办法]
C# code
using System;using System.Windows.Forms;using System.Runtime.InteropServices;using System.Drawing;class SourceForm:Form{    RichTextBox txtBox;    public Control SourceControl{        get{return txtBox;}    }    public SourceForm()    {        txtBox = new RichTextBox();        txtBox.Dock = DockStyle.Fill;        Text = "Source";        Controls.Add (txtBox);    }}class DestForm:Form{    [DllImport("user32.dll")]    static extern IntPtr GetDC(IntPtr wnd);    [DllImport("user32.dll")]    static extern bool ReleaseDC(IntPtr wnd,IntPtr hdc);    [DllImport("gdi32.dll")]    static extern bool StretchBlt(IntPtr hdcDest, int nXOriginDest, int nYOriginDest,        int nWidthDest, int nHeightDest,        IntPtr hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc,        uint dwRop);    const uint SRCCOPY = 0x00CC0020;    Panel panel;        Timer timer;    void SetDock (Control ctrl){        ctrl.Height = Height - 60;        ctrl.Width = Width;        ctrl.Anchor = AnchorStyles.Top|AnchorStyles.Bottom|AnchorStyles.Left|AnchorStyles.Right;    }    SourceForm srcForm;    public DestForm(SourceForm srcForm)    {        this.srcForm = srcForm;        srcForm.Show ();                timer = new Timer();        panel = new Panel ();        var checkBox = new CheckBox();        Text = "Mirror";                checkBox.Checked = false;        checkBox.Text = "Mirror On/Off";        checkBox.Dock = DockStyle.Bottom;        checkBox.CheckedChanged += (s,e)=>MirrorState = checkBox.Checked;                SetDock (panel);        Controls.Add (panel);        Controls.Add (checkBox);                timer.Interval =1;        timer.Enabled = true;        timer.Tick += (s, e) =>CapSrcFormAndMirror();            }    bool MirrorState {        get;        set;    }    void CapSrcFormAndMirror()    {        Bitmap bmp = new Bitmap(srcForm.SourceControl.Width, srcForm.SourceControl.Height);        using (var g = panel.CreateGraphics())        {            var srcDc = GetDC(srcForm.SourceControl.Handle);            var dstDc = g.GetHdc();                        if (MirrorState)                StretchBlt(dstDc, 0, 0, bmp.Width, bmp.Height, srcDc, bmp.Width - 1, 0, -bmp.Width , bmp.Height, SRCCOPY);            else                StretchBlt(dstDc, 0, 0, bmp.Width, bmp.Height, srcDc, 0, 0, bmp.Width , bmp.Height, SRCCOPY);                            g.ReleaseHdc();            ReleaseDC(srcForm.SourceControl.Handle, srcDc);        }    }}class program{    static void Main()    {        Application.Run(new DestForm(new SourceForm()));    }}
[解决办法]

贴个效果图
[解决办法]
探讨

帖子又加了50分,一共200分,加上我http://topic.csdn.net/u/20110513/11/dad59784-9d00-4a36-8ea2-aac5333e2c5d.html这个帖子总共500分啦呵呵~~~~

截图镜像这个我知道,可是测试了很多遍无法实现我写的控制方法

我的主要需求是:
软件默认全屏,点击定义的按键RTB文字滚动以使播音员播音,然后再次点击定义的按……

[解决办法]
思路:字体文件内保存的是每个字的GraphicsPath,如果可以读取并反转再另存一种新字体,我想这样应该是你想要的吧?
[解决办法]
C# code
using System;using System.Windows.Forms;using System.Runtime.InteropServices;using System.Drawing;class SourceForm:Form{    RichTextBox txtBox;    public Control SourceControl{        get{return txtBox;}    }    public DestForm DestForm{    get;    set;    }    public SourceForm()    {        txtBox = new RichTextBox();        txtBox.Dock = DockStyle.Fill;        this.FullScreen();    Left = 0;    FormBorderStyle = FormBorderStyle.None;            txtBox.KeyUp += (s,e)=>{        switch (e.KeyCode)        {        case Keys.Escape:            DestForm.Close();            break;        case Keys.F4:            DestForm.MirrorState = !DestForm.MirrorState ;            Left = DestForm.MirrorState?4000:0;            break;        }    };    Text = "Source";        Controls.Add (txtBox);        }}class DestForm:Form{    [DllImport("user32.dll")]    static extern IntPtr GetDC(IntPtr wnd);    [DllImport("user32.dll")]    static extern bool ReleaseDC(IntPtr wnd,IntPtr hdc);    [DllImport("gdi32.dll")]    static extern bool StretchBlt(IntPtr hdcDest, int nXOriginDest, int nYOriginDest,        int nWidthDest, int nHeightDest,        IntPtr hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc,        uint dwRop);    const uint SRCCOPY = 0x00CC0020;        Timer timer;    void SetDock (Control ctrl){        ctrl.Height = Height - 60;        ctrl.Width = Width;        ctrl.Anchor = AnchorStyles.Top|AnchorStyles.Bottom|AnchorStyles.Left|AnchorStyles.Right;    }    SourceForm srcForm;    public DestForm(SourceForm srcForm)    {        this.srcForm = srcForm;    srcForm.DestForm = this;        srcForm.Show ();        this.FullScreen();    TopMost = false;        timer = new Timer();        Text = "Mirror";                GotFocus  += (s,e)=> srcForm.SourceControl.Focus();                timer.Interval =1;        timer.Enabled = true;        timer.Tick += (s, e) =>CapSrcFormAndMirror();            }        public bool MirrorState {        get;        set;    }    void CapSrcFormAndMirror()    {    var width = srcForm.SourceControl.Width;    var height = srcForm.SourceControl.Height;    srcForm.SourceControl.Invalidate ();        using (var g = CreateGraphics())        {            var srcDc = GetDC(srcForm.SourceControl.Handle);            var dstDc = g.GetHdc();                        if (MirrorState)                StretchBlt(dstDc, 0, 0, width , height, srcDc, width - 1, 0, -width , height, SRCCOPY);            else                StretchBlt(dstDc, 0, 0, width, height, srcDc, 0, 0, width , height, SRCCOPY);                            g.ReleaseHdc();            ReleaseDC(srcForm.SourceControl.Handle, srcDc);        }    }}static class program{    public static void FullScreen (this Form frm){    frm.StartPosition = FormStartPosition.Manual;    frm.FormBorderStyle = FormBorderStyle.None;    frm.Size = Screen.PrimaryScreen.Bounds .Size;    frm.Location = new Point (0,0);    }    static void Main()    {        Application.Run(new DestForm(new SourceForm()));    }} 


[解决办法]

探讨

还是无法全屏显示镜像,估计是你没考虑分辨率呵呵

读书人网 >C#

热点推荐