精华内容
下载资源
问答
  • 1.重写wndProc代码; 2.创建消息; 3.调用API代码:
  • 参考资料: ... 总结: ...具体方法请自行百度。 资料下载地址:链接:https://pan.baidu.com/s/1d4e2hRiAsuKmqaPsRdSIPg 密码:9r44 转载于:https://www.cnblogs.com/dapeng17951/p/9582498.html

    参考资料:

    https://social.msdn.microsoft.com/Forums/zh-TW/1b781685-c670-4338-953d-1957a8f24a66/opentkglcontrol?forum=232

    总结:

    注意:OpenTK.GLControl.dll不能直接用Nuget命令在线安装,需要本地引用OpenTK.GLControl.dll(放于Debug目录下),工具箱加载OpenTK.GLControl.dll。

    具体方法请自行百度。

    资料下载地址:链接:https://pan.baidu.com/s/1d4e2hRiAsuKmqaPsRdSIPg 密码:9r44

    转载于:https://www.cnblogs.com/dapeng17951/p/9582498.html

    展开全文
  • 方法一、利用控件或窗体的Paint事件中的PainEventArgs 在窗体或控件的Paint事件中接收对图形对象的引用,作为PaintEventArgs(PaintEventArgs指定绘制控件所用的Graphics)的一部分,在为控件创建绘制代码时,通常会...
  •  所有的 Windows 窗体都位于一个称为“region”中,窗体的大小如果超出“region”的范围,windows 会自动裁剪超出"region"范围那部分的窗体,使其不可见。所以,要创建不规则窗体有两个步骤:第一 步就是创建不...

    1.CRgn :实现原理

       所有的 Windows 窗体都位于一个称为“region”中,窗体的大小如果超出“region”的范围,windows 会自动裁剪超出"region"范围那部分的窗体,使其不可见。所以,要创建不规则窗体有两个步骤:第一 步就是创建不规则"region".第二步就是将窗体放到创建的“region”中。第二步很简单就调用一条语句即可。

    (1)第一步:创建不规则"region"

    MFC"region"对象,由CRgn类实现。CRgn的几乎每个成员函数都有同名的SDK API函数对应。

    1) BOOL CRgn::CreateRectRgn( int x1, int y1, int x2, int y2 ); 创建矩形的“region”

    2) BOOL CRgn::CreateEllipticRgn( int x1, int y1, int x2, int y2 ); 创建圆形或椭圆形“region”

    3) BOOL CRgn::CreateRoundRectRgn( int x1, int y1, int x2, int y2, int x3, int y3 ); 创建圆角矩形“region”

    4) BOOL CRgn::CreatePolygonRgn( LPPOINT lpPoints, int nCount, int nMode ); 创建多边形“region”



    (2)第二步:在SDK中调用API函数SetWindowRgn,该函数原型如下:

    int SetWindowRgn( HWND hWnd, HRGN hRgn, BOOL bRedraw );

       hWnd为待设置的窗体句柄,hRgn为已经创建的"region"句柄,bRedraw代表是否要重绘窗体。在MFC 中使用窗口类CWnd的成员函数int CWnd::SetWindowRgnHRGN hRgn, BOOL bRedraw );该函数的参数意 义与API中同名函数相同。

    2.作图路径法创建”region”


    使用该方法创建”region”的过程如下:
    第一步绘制所要创建的窗体形状。
    该步骤中使用到CDC类中的一些成员函数如下:

    BOOL CDC::BeginPath( );

    调用该函数后当前设备环境(DC)开始追踪绘图的过程。

    int CDC::SetBkMode( int nBkMode );

    设置绘图时的背景模式,此应用中nBkMode必须取值为TRANSPARENT 。即设置绘图时背景不发生变化。

    BOOL CDC::EndPath( );

    调用该函数后当前设备环境(DC)结束追踪绘图的过程。
       开始绘图前,先调用BeginPath,然后调用SetBkMode。接下去就可调用CDC的其他绘图函数作图,例如Arc,AngleArc,LineTo,MoveTo,RoundRect,,Textout等等。绘图完毕调用EndPath().

    第二步将绘制的结果转成”region”.此步骤中使用SDK API函数


    HRGN PathToRegion( HDC hdc );

    Hdc为作图DC的句柄, CDC类中的m_hDC成员变量可做此参数传入。

    3.根据图像创建”region”

    此法创建不规则窗体比较复杂。首先准备一张含有目标窗体形状的图片,设置透明色即将图片中部不属于窗体形状的部分,标记成同一种颜色,例如蓝色RGB(0,0,255).程序运行后先装入图片。然后逐个扫描图片的每个像素,如这个像素不属于透明色,则在相应位置创建一个只含一个像素的“region”然后将这些小”region ”合并起来组成一个任意形状的”region”.这里将使用到CRgn的一个成员函数 :

    int CRgn::CombineRgn( CRgn* pRgn1, CRgn* pRgn2, int nCombineMode );

      其中pRgn1,pRgn2为要合并的两个“region”nCombineMode为合并的方式,此应用中取RGN_OR,即两”region”全部合并去处重复部分。代码实现如下:

    void SetupRegion(

    CDC *pDC, //窗体的DC指针

    CBitmap &cBitmap, //含有窗体形状的位图对象

    COLORREF TransColor //透明色

    )

    {    CDC memDC;

        //创建与传入DC兼容的临时DC

        memDC.CreateCompatibleDC(pDC);

        CBitmap *pOldMemBmp=NULL;

        //将位图选入临时DC

        pOldMemBmp=memDC.SelectObject(&cBitmap);

       

        CRgn wndRgn;

        //创建总的窗体区域,初始region0

        wndRgn.CreateRectRgn(0,0,0,0);

     

        BITMAP bit;   

        cBitmap.GetBitmap (&bit);//取得位图参数,这里要用到位图的长和宽     

       

        int y;

            for(y=0;y<=bit.bmHeight  ;y++)

            {

            CRgn rgnTemp; //保存临时region

                

                int iX = 0;

                do

                {

                    //跳过透明色找到下一个非透明色的点.

                    while (iX <= bit.bmWidth  && memDC.GetPixel(iX, y) == TransColor)

                        iX++;

                    //记住这个起始点

                    int iLeftX = iX;

                    //寻找下个透明色的点

                    while (iX <= bit.bmWidth  && memDC.GetPixel(iX, y) != TransColor)

                        ++iX;

                    //创建一个包含起点与重点间高为1像素的临时“region”

                    rgnTemp.CreateRectRgn(iLeftX, y, iX, y+1);

                    //合并到主"region".

                    wndRgn.CombineRgn(&wndRgn, &rgnTemp, RGN_OR);

                    

            //删除临时"region",否则下次创建时和出错

                    rgnTemp.DeleteObject();

                }while(iX GetWindow(); pWnd->SetWindowRgn(wndRgn,TRUE); pWnd->SetForegroundWindow(); }

       上述代码创建的不规则窗体中,在OnEraseBkgnd事件中绘制该位图,就可得到与该位图形状一模一样的窗体。 



    4、小结

      三种创建“region”的方法,第一种最简单,如果所需的窗体形状是简单的几何图形,这种方法最合适;第二种稍微复杂些,但是创建的窗体形状更多些;第三种方法可以创建任何在图片中画出的窗体形状,但是实现的复杂度也最高。 






    展开全文
  • 方法一、利用控件或窗体的Paint事件中的PainEventArgs 在窗体或控件的Paint事件中接收对图形对象的引用,作为PaintEventArgs(PaintEventArgs指定绘制控件所用的Graphics)的一部分,在为控件创建绘制代码时,通常...

    方法一、利用控件或窗体的Paint事件中的PainEventArgs

    在窗体或控件的Paint事件中接收对图形对象的引用,作为PaintEventArgs(PaintEventArgs指定绘制控件所用的Graphics)的一部分,在为控件创建绘制代码时,通常会使用此方法来获取对图形对象的引用。

    例如:

    //窗体的Paint事件的响应方法


    复制代码 代码如下:
    private void form1_Paint(object sender, PaintEventArgs e)

    {

        Graphics g = e.Graphics;

    }


    也可以直接重载控件或窗体的OnPaint方法,具体代码如下所示:
    复制代码 代码如下:
    protected override void OnPaint(PaintEventArgs e)

    {

        Graphics g = e.Graphics;

    }


    Paint事件在重绘控件时发生。

    方法二、调用某控件或窗体的CreateGraphics方法

    调用某控件或窗体的CreateGraphics方法以获取对Graphics对象的引用,该对象表示该控件或窗体的绘图图面。如果想在已存在的窗体或控件上绘图,通常会使用此方法。

    例如:

    Graphics g = this.CreateGraphics();

    方法三、调用Graphics类的FromImage静态方法

    由从Image继承的任何对象创建Graphics对象。在需要更改已存在的图像时,通常会使用此方法。

    例如:


    复制代码 代码如下:
    //名为“g1.jpg”的图片位于当前路径下

    Image img = Image.FromFile("g1.jpg");//建立Image对象

    Graphics g = Graphics.FromImage(img);//创建Graphics对象


    详细出处参考:http://www.jb51.net/article/36730.htm

    展开全文
  • 创建Graphics对象的三种方法

    千次阅读 2017-04-19 19:18:46
    方法一、利用控件或窗体的Paint事件中的PainEventArgs 在窗体或控件的Paint事件中接收对图形对象的引用,作为PaintEventArgs(PaintEventArgs指定绘制控件所用的Graphics)的一部分,在为控件创建绘制代码时,通常...

    方法一、利用控件或窗体的Paint事件中的PainEventArgs

    在窗体或控件的Paint事件中接收对图形对象的引用,作为PaintEventArgs(PaintEventArgs指定绘制控件所用的Graphics)的一部分,在为控件创建绘制代码时,通常会使用此方法来获取对图形对象的引用。

    例如:

    //窗体的Paint事件的响应方法

    代码如下:

    private void form1_Paint(object sender, PaintEventArgs e)

    {

        Graphics g = e.Graphics;

    }


    也可以直接重载控件或窗体的OnPaint方法,具体代码如下所示:

    代码如下:

    protected override void OnPaint(PaintEventArgs e)

    {

        Graphics g = e.Graphics;

    }


    Paint事件在重绘控件时发生。

    方法二、调用某控件或窗体的CreateGraphics方法

    调用某控件或窗体的CreateGraphics方法以获取对Graphics对象的引用,该对象表示该控件或窗体的绘图图面。如果想在已存在的窗体或控件上绘图,通常会使用此方法。

    例如:


    Graphics g = this.CreateGraphics();


    方法三、调用Graphics类的FromImage静态方法

    由从Image继承的任何对象创建Graphics对象。在需要更改已存在的图像时,通常会使用此方法。

    例如:


    代码如下:

    //名为“g1.jpg”的图片位于当前路径下

    Image img = Image.FromFile("g1.jpg");//建立Image对象

    Graphics g = Graphics.FromImage(img);//创建Graphics对象

    展开全文
  • 就我知道三种方法,先看一下msdn介绍: 访问 Windows 窗体控件本质上不是线程安全。如果有两个或多个线程操作某一控件状态,则可能会迫使该控件进入一种不一致状态。还可能出现其他与线程相关...
  • 就我知道三种方法,先看一下msdn介绍: 访问 Windows 窗体控件本质上不是线程安全。如果有两个或多个线程操作某一控件状态,则可能会迫使该控件进入一种不一致状态。还可能出现其他与线程相关 bug,...
  •  就我知道三种方法,先看一下msdn介绍:访问 Windows 窗体控件本质上不是线程安全。如果有两个或多个线程操作某一控件状态,则可能会迫使该控件进入一种不一致状态。还可能出现其他与线程相关 bug,...
  • 参考资料: ... 总结: 1.新建winform窗体程序、删除初始Form1.cs初始窗体. 2.连网执行Nuget命令安装opentk,安装命令:Install-Package OpenTK -Versi...
  • 【第一种方法:】 第一步: 创建接口IForm,父窗体继承这个接口 public interface IForm { void RefreshForm(); } 第二步: 父窗体实现接口中方法,在实现接口方法中写入刷新代码 Form2 f = new Form2(); ...
  • 下面说明了五种可以实现等待窗体的方式,其中三种给出了代码。 准备资料 安全访问控件成员 为了保证在创建控件的线程上调用控件成员,用下面的方式封装控件的属性、方法、其他自定义成员的访问。 如: ...
  • 下面说明了五种可以实现等待窗体的方式,其中三种给出了代码。 准备资料 安全访问控件成员 为了保证在创建控件的线程上调用控件成员,用下面的方式封装控件的属性、方法、其他自定义成员的访问。 如: ...
  • 我们在自己线程操作UI控件时,系统提示错误详细信息为:线程间操作无效: 从不是创建控件“XXX”线程访问它。先看一下msdn介绍:访问 Windows 窗体控件本质上不是线程安全。如果有两个或多个线程操作某一控件...
  • 说到WPF项目,肯定会想到XAML,这两者是相互补充的技术,其实它们也是相互独立的,所以可以创建不使用XAML的WPF项目,今天就讲一讲创建WPF应用程序的三种不同的编码方式。 1、只使用代码:这种方法类似于传统的...
  • 第一种方法:创建一个类,里面声明用于存储接收字段。传时候存储于字段中,要用时候,直接类名.字段名进行调用。(这种方法传递是双向...然后就可以通过f.Name取值了第三种方法:用构造函数在窗体Form2中int...
  • 窗体的添加与删除

    2018-03-20 13:53:00
    窗体也属于控件 控件 删除 ...在main函数当中创建的窗体对象,我们称之为这个...一种是通过属性面板(三种方法) 右键、视图、F4 一种是通过代码 窗体唯一标识.属性名=属性值 窗体的常用属性 Backcolor ...
  • C#CreateGraphics方法的三种实现方式

    千次阅读 2016-04-25 10:30:07
    方法一、利用控件或窗体的Paint事件中的PainEventArgs 在窗体或控件的Paint事件中接收对图形对象的引用,作为PaintEventArgs(PaintEventArgs指定绘制控件所用的Graphics)的一部分,在为控件创建绘制代码时,通常...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 344
精华内容 137
关键字:

创建窗体的三种方法