精华内容
下载资源
问答
  • c# 与 c++ 界面同框终极技巧
    千次阅读 多人点赞
    2021-07-14 21:32:28

    1、界面编程,需要同框

    当你写了一个c# 程序,而又不得不使用c++ 例如MFC或者qt等来做高效率的编解码等等工作的时候,问题来了,怎么通信,怎么解决两个界面的问题,这里介绍一个终极技巧,那就是c# 直接嵌入c++窗口。

    这里下载源代码

    2、制作c# 调用api dll

    2.1 setparent 函数

    设置父窗体函数,这是个API函数,可以设置窗体为另外一个窗体的父亲

     public static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
    

    2.2 c# 调用API dll 封装

    namespace cnc
    {
        public struct COPYDATASTRUCT
        {
            public IntPtr dwData;
            public int cData;
            [MarshalAs(UnmanagedType.LPStr)]
            public string lpData;
        }
    
        public class cncfunc
        {
            Process p = null;
    
            private const int WM_COPYDATA = 0x004A;
            const int SWP_NOMOVE = 0x02, SWP_NOSIZE = 0x01, SWP_NOZORDER = 0x04, SWP_FRAMECHANGED = 0x20;
            [DllImport("user32.dll", EntryPoint = "SetParent")]
            public static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
            [DllImport("user32.dll", EntryPoint = "GetWindowLong")]
            public static extern int GetWindowLong(IntPtr hwnd, int nIndex);
            [DllImport("user32.dll", EntryPoint = "SetWindowLong")]
            public static extern int SetWindowLong(IntPtr hwnd, int nIndex, int dwNewLong);
            [DllImport("user32.dll")]
            private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndlnsertAfter, int X, int Y, int cx, int cy, uint Flags);
            [DllImport("user32.dll ", EntryPoint = "ShowWindow")]
            public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
    
            [DllImport("User32.dll")]
            public static extern int SendMessage(int hwnd, int msg, int wParam, ref COPYDATASTRUCT IParam);
            [DllImport("User32.dll")]
            public static extern int FindWindow(string lpClassName, string lpWindowName);
            /// <summary>
            /// 向C++程序 CshapMessage发送消息
            /// </summary>
            /// <param name="nMessgeId"></param>
            /// <param name="strSend"></param>
            /// <returns></returns>
            public int SndMessage(int nMessgeId, String strSend)
            {
                if (p == null)
                	return -1;
                //    WINDOW_HANDLE = p.MainWindowHandle;
                IntPtr hWnd = p.MainWindowHandle;
                int handle = hWnd.ToInt32();
                if (handle != 0)
                {
                    COPYDATASTRUCT cdata;
                    cdata.dwData = (IntPtr)nMessgeId;//这里可以传入一些自定义的数据,但只能是4字节整数 
                    cdata.lpData = strSend;//消息字符串
                    cdata.cData = System.Text.Encoding.Default.GetBytes(strSend).Length + 1;//注意,这里的长度是按字节来算的
    
                    return SendMessage(handle, WM_COPYDATA, 0, ref cdata);
                }
                else
                {
                    return -1;
                }
                return 0;
            }
    
    
            public int connect(string name,int time,IntPtr parent)
            {
                if (p != null)
                    return -1;
                p =  new Process();
                p.StartInfo.FileName = name; //"MFCApplication1.exe";
                p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;//加上这句效果更好
                p.Start();
                System.Threading.Thread.Sleep(time);
                SetParent(p.MainWindowHandle, parent/*pictureBox1.Handle*/);
                //panel1.Handle为要显示外部程序的容器
                ShowWindow(p.MainWindowHandle, 3);
                return 0;
            }
        }
    }
    

    3 建立一个c# 窗口程序

    窗口程序叫做rcxsharp
    c# 窗体
    c# 窗体中包含两个按钮,一个打开,一个发送消息,打开负责打开MFC程序,发送消息负责向c++ MFC发送信息,以便于控制

     public partial class Form1 : Form
        {
            cncfunc m_cncfunc = new cncfunc();
            //IntPtr hwnd;
            public Form1()
            {
                InitializeComponent();
            }
            private void button2_Click(object sender, EventArgs e)
            {
                m_cncfunc.connect("rcx.exe", 200, pictureBox1.Handle);
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                m_cncfunc.SndMessage(100, "hello world");
            }
        }
    

    代码很简单:
    打开按钮:cncfunc 对象负责打开本目录下的rcx.exe程序,并把这个程序放到pictureBox1 里面。
    发送消息按钮,发送一个hello world 消息给打开的rcx.exe程序

    4 、MFC 窗口

    制作一个MFC程序,名称叫做rcx
    MFC 窗体

    5、开始执行

    点击打开按钮,MFC 窗体被放进了c# 窗体里面。
    点击打开
    点击按钮,MFC 窗口里的事件被如期执行
    点击按钮
    点击发送消息,MFC窗体中的cmd 被修改成了hello world
    发送消息

    6、MFC窗体接受copydata 消息代码

    头文件定义消息

    	afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);
    
    OnCopyData 消息接收代码如下:
    BOOL CMFCApplication1Dlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
    {
    	USES_CONVERSION;
    	switch (pCopyDataStruct->dwData)
    	{
    	case 98:
    		break;
    	case 99:
    	{
    		char * wname = (char*)pCopyDataStruct->lpData;
    		m_windowname = A2W(wname);
    
    		break;
    	}
    	case 100:
    	{
    	
    		char * d = (char*)pCopyDataStruct->lpData;
    		CWnd *wnd = GetDlgItem(IDC_S_SHOW);
    		wnd->SetWindowTextW(A2W(d));
    		break;
    	}
    
    	default:
    	{
    		break;
    	}
    	}
    
    	return CDialogEx::OnCopyData(pWnd, pCopyDataStruct);
    }
    

    很好用吧,免去了很多麻烦的事情。
    这里下载源代码

    更多相关内容
  • 根据sublime text3 界面为模板,配置keil界面。 使用方法: 下载文件,进入keil安装目录,使用下载的文件替换安装目录中的global.prop,然后就可以正常使用的
  • C++界面开发实例

    2018-03-20 15:28:40
    C++界面开发实例!特别适合初学者和有一点基础的编程学习者!
  • 界面切换,C++与qml数据通信,c++的数据注册到qml中,在qml显示
  • c++界面编程(界面设计必备)c++界面编程(界面设计必备)c++界面编程(界面设计必备)c++界面编程(界面设计必备)
  • C++界面设计

    2012-09-02 14:46:24
    一实例介绍如何实现三个独立的分离窗口:监视窗口,控制窗口和动画窗口,并以图1中的进水和温度值传递为例,介绍如何实现控制功能和不同窗口间的数据共享,并介绍实现无闪烁动画的方法。
  • C++界面

    万次阅读 多人点赞 2019-08-03 11:23:23
     ...Xtreme ToolkitPro v15.0.1,Skin++,等界面库,以及一些网友自己写的界面库,开始对于C++软件界面美化有了一点点的心得。不敢藏私,希望和一些新手朋友们分享交流。     一...

            刚开始用C++做界面的时候,根本不知道怎么用简陋的MFC控件做出比较美观的界面,后来就开始逐渐接触到BCG  Xtreme ToolkitPro v15.0.1,Skin++,等界面库,以及一些网友自己写的界面库,开始对于C++软件界面美化有了一点点的心得。不敢藏私,希望和一些新手朋友们分享交流。


        一.  开源C++界面库

      

    1.RingSdk

        Ringsdk是CSDN上一个前辈自己写的界面库,这个界面库很轻而易举实现QQ2009的界面效果。链接见 

      http://blog.csdn.net/ringphone/article/details/2911244   貌似Ringsdk和MFC无法进行交互,但是 RingSdk其中有很多的图形处理的代码都非常有参考价值。


    2.redui的官方网站http://www.redui.org 已经打不开了。官方QQ群是 40729296 

    CSDN地址是 
    http://blog.csdn.net/jameshooo/article/details/6677272

    这是官方的说明

    REDUI,又名REDirectUI,全称是Rendering Engine for DirectUI,是一款基于XML描述的 DirectUI 渲染引擎,能将“控件”的交互和渲染过程分解成多种独立的要素,包括布局、视觉效果、样式、UI自动化、滤镜、脚本、事件、3D场景、3D模型、通用动画等。通过这些要素的排列组合,可以呈现出各种不同效果的控件,甚至能在XML中直接自定义控件类型。支持2D/3D无缝融合。
    • REDUI支持GDI/GDI+/DirectDraw/D3D等渲染方式,并有支持OPENGL/ES的愿望


    3.Duilib 这个就比较大名鼎鼎了,不用多说了吧。包括华为网盘在内的很多业内企业都在用这个界面库。我用Duilib做了一个小型的界面。贴出来献丑一个。



    4.WGI-1.0.7-Demo-Project-for-windows 。。额。。时间太长,忘记了这个代码是什么,姑且先忽略它。


    5.cj60lib 这个玩过Gh0st3.6木马的人都熟悉,是一款对MFC进行拓展的界面库

    6.金山界面库 这个就不赘述了,可以直接上金山的论坛找源代码和资料

    7.skinTK_V0.20 一款类似于Skin++的开源界面库

    8.FreeCL_Skin2.3 一款不错的控件库 扩展了常用的MFC控件 。  这个是FreeCL_Skin提供的一个效果实例。



    9.GuiLib1.5 一个老外写的界面库 没有用过,没有调查,就没有发言权。大家自行百度。


    10.基于3D的界面库 MangoGUI_V0.1.5

    MangoGUI是猫仔在DXUT基础上修改得来的一个开源GUI系统。

    目前来说基本上继承了DXUT里面绝大多数的功能和改进了使用方式,让DX学习爱好者更容易去使用GUI系统。

    如果你也是一位对GUI有兴趣的同学,非常欢迎你一同来参与到MangoGUI的设计当中来!

    作者博客

    http://m9551.blog.sohu.com/


    11.基于Skia的directui库metalbone

    代码托管地址

    http://code.google.com/p/metalbone/

    官方说明

    MetalBone是一个C++ DirectUI库。接口、命名等借鉴Qt,而并非使用Windows风格。

    MetalBone的特点是,使用CSS来定制样式(如果没有CSS的话,则什么也不显示,lol)。目前可以使用Direct2D或Google Skia来绘制界面。MetalBone使用的是 WWM协议(基于LGPL)


    12.SonicUI2011

    效果比较不错的一款皮肤库

    作者CSDN地址是 

    http://my.csdn.net/akof1314


    13 基于OpenGl的界面库 beGUI-0.1.3-src

    代码托管地址

     http://code.google.com/p/begui/


                   二 未开源或商业界面库



    1.Flash4UI 

     看命名就知道是将Flash嵌入到UI中。

    官方网站是  http://www.flash4ui.com/

    效果图片



    2.bolt 迅雷7界面引擎

    迅雷界面引擎,这个用过迅雷下载和迅雷看看的就有体会了,界面的确是做的非常的赞。而且流畅,CPU占用和内存各种都很棒。采用了脚本交互的方式,脚本语言采用了Lua.可惜的是迅雷只开放了接口SDK给个人使用。

    官方网址 http://bolt.xunlei.com/


    3.clayui

    百度百科说明   clayui是一个采用纯C++编写的界面框架,可以很方便的移植到各种系统上。现在支持的系统包括android,windows,wince,linux。clayui的特点是能实现各种2D,3D动画,一些WPF,FLEX才能实现的界面效果,通过clayui可以很方便的实现。 clayui的底层渲染支持纯软件渲染,d3d,opengl es硬件加速渲染,您可以根据自身的需求选择合适的渲染方式,使您界面的用户体验达到最佳效果

    效果


    4.DSkinLite

    官方网址  http://www.uieasy.cn/dskinlite/

    官方Demo



    5.libuiDK

    官方说明:LibUIDK是国际上顶尖的专业开发Windows平台下图形用户界面的开发包,也是国内第一款商业的高级界面开发工具。该开发包基于Microsoft的MFC库。使用此开发工具包可轻易把美工制作的精美界面用Visual C++实现,由于LibUIDK采用所见即所得的方式创建产品界面,所以极大的提高了产品的开发速度,并大大增强图形用户界面(GUI)的亲和力。LibUIDK还可以使您的软件轻松具有当今流行的换肤功能,以提高产品的竞争力。

    官方网站

    http://www.iuishop.com/index.asp

    实例



    6. SiteUi   SkinSE  都有官方网站。就不继续搬砖的工作了。


    7.(未开源)上海勇进UIPower

    这个比较牛逼。一款界面库就是大几百万的。老总阙海忠还亲自录了20集的界面库相关的视频

    官方网站 http://www.uipower.com/

    这是老阙的视频。



    8.炫彩界面库

    炫彩界面库貌似是私人开发的一个界面库,可以用C++.c#易语言等来开发。炫彩库的作者貌似是湖北襄阳人哟。

    官方网站 http://www.xcgui.com/


    9.魔方界面库

    官方网站 http://www.muilib.com/

    MuiLib(Magic UI Library)Windows高级界面开发库是在国内首家免费开源的DuiLib界面开发库基础上经过针对性的扩展而发展起来的,他继承了DuiLib高度自由灵活的特点,并吸收了其他界面库的一些优点,针对Windows层窗口按像素透明技术而重点优化后形成的一个优秀界面开发库,是一个使用纯C++调用Windows API的开发库,无任何其他第三方依赖框架,您可以使用其提供的各种高级控件来创建更加炫酷的用户界面


    10 XtremeToolkit

    由Codejock 公司出品的一款界面库。应用也是比较广泛的。在2013版的大灰狼远程操控中就采用了这款界面库。


    11.Sharpui

    代码托管地址  https://github.com/china520/sharpui

    Sharpui是居于现在流行的DUI思想的一套界面库,可以方便实现半透明和各种界面效果,采用纯c++实现,分为引擎和控件两个部分,这两个部分采用动态库的形式提供,引擎部分处理了事件、资源、渲染、控制逻辑,同时提供了各种应用层面控件的实现基类,包括:Visual、Element、FrameworkElement、Control、ContentControl、Window、Panel、Popup,这些类封装了基础控件的实现细则,所有用户实现的控件都必须继承自这些类,对于需要呈现的控件必须继承至FrameworkElement。
    控件部分提供的所有控件均采用DUI方式实现、分层绘制,实现各种常用的布局控件,可灵活实现界面的自动布局;Sharpui本身所有数据结构采用原生实现,内存自动管理,不依赖于std的任何容器,使得库的使用更加独立、编译更加简单,使用VS任意一个版本编译都可以用在其它版本里,不需要担心由于std版本原因而产生编译问题。



    以上都是我在工作和个人业余时间收集积累的开源或商业界面库,这些界面库各有各的特色和侧重点,也有不同的换肤思想,如果要用在项目中还是要进行适当的增删整改。

    由于个人能力水平见识有限,也有些大神的作品没有被收录其中。表示遗憾。




    /**************************************************Witch_Soya***********************************************************/

    /**************************************************2013年9月3日15:55:18***********************************************/

    展开全文
  • C++界面相关的编程 含有源代码 有特别详细的教程
  • 很炫的c++界面,完全开放源代码,快来看看吧,想学做界面的不要错过哟
  • 漂亮的三方界面库,可以编写非常漂亮的界面.长得跟.NET界面一样
  • 漂亮的C++界面

    2017-08-27 11:28:40
    动画图标,漂亮界面
  • 自控理论实验,C++编写界面,QT平台进行开发。。。。。。。
  • c++界面库demo

    2017-05-22 00:52:38
    界面展示,因为开发环境比较大,不能上传,只上传运行程序。由ogre+mygui组成; 测试了ogre的界面,mygui的界面使用。
  • c++ 界面化编程 CLR

    千次阅读 2020-03-13 16:45:40
    希望能用C#的设计器搭配C++的语法,刚好看到论坛上有实现方法,于是就完成了折腾,以后如果有人说C++只有控制台,就可以很淡定的告诉别人继续深入学习C++就会发现不止有控制台,还有有很方便的界面。 以下是在VS...

           刚开始找界面化编程实现方法的时候大多推荐的QT和C#,于是去下载了QT和C#来用, 用了一些时候,做了一些比较,有点自己的想法,希望能用C# 的设计器搭配C++的语法,刚好看到论坛上有实现方法,于是就完成了折腾,以后如果有人说C++ 只有控制台,就可以很淡定的告诉别人继续深入学习C++就会发现不止有控制台,还有有很方便的界面。

    以下是在VS2019上实现的,和VS2017实现的方法一样

    首先要新建一个CLR的空项目

    这个项目在单个组件里,不是默认安装的

    空项目建完后右键点击  工程名->属性

    链接器->系统

    子系统:窗口 (/SUBSYSTEM:WINDOWS)

    链接器->高级

    入口点: Main

    别忘了点击应用和确定

    接下来到资源管理器

    右键 工程名称->添加->新建项

    展开  已安装  选择UI ,选择窗体

    名称  默认    

    点击添加,等待完成

    添加完成后设计器会显示错误,关闭设计文件,在MyForm.h里面添加一段代码就可以了

     

    注意空间名   要和工程名一样 ,这里创建的不是默认文件名,默认是 Project 

    #include "MyForm.h"

    using namespace CLRTemp;

    [STAThread]
    void Main(array<String^>^ args)
    {
        Application::EnableVisualStyles();
        Application::SetCompatibleTextRenderingDefault(false);

        MyForm form;
        Application::Run(% form);
    }

    到这里全部保存,退出解决方案,重新打开解决方案

    这个设计器就是C#的设计器,简单好用,个人觉得比QT的设计器方便

    为什么不直接用C# ,并不是C# 不好,是有一些功能在C#上实现起来不如C++灵活

     

     

    在使用过程中发现编译时有无法解析的问题,原因是少了库文件支持

    选择  链接器      输入        附加依赖项          从父级或项目默认设置继承

    点击  应用   确定

    参考 申佳明哥哥的博文完成  https://blog.csdn.net/ishenjiaming/article/details/92067094?locationNum=5&fps=1

     

    展开全文
  • C++图形界面设计Qt4-中文版..............................
  • 创建可以显示界面的windows服务 源代码用C++
  • 如何解决DEV-C++界面模糊的问题

    千次阅读 2020-10-18 19:21:49
    如何解决DEV-C++界面模糊的问题 右键点击DEV-C++的图标: 再点击它的属性: 点击兼容性: 点击更改高DPI设置: 点击高DPI缩放替代: 选择系统增强: 接下来就可以愉快的用DEV-C++编程了。 ~如有问题与建议...

    如何解决DEV-C++界面模糊的问题

    右键点击DEV-C++的图标:

    image-20201017170719377

    再点击它的属性:

    image-20201017171104015

    点击兼容性:

    image-20201017171431881

    点击更改高DPI设置:

    image-20201017171939303

    点击高DPI缩放替代:

    image-20201018184751328

    选择系统增强:

    image-20201018184847257

    接下来就可以愉快的用DEV-C++编程了。


    ~如有问题与建议请提出~

    ~END~
    展开全文
  • C++界面制作

    2014-11-13 14:44:20
    C++界面制作
  • devc++界面调整

    千次阅读 2020-06-26 07:55:04
    求问各位大神,devc++自从手动把下面的编译报错区调整到最小了以后,再拉出来就是这个样子了,应该怎么调整啊?
  • Windows C++界面

    万次阅读 2017-02-14 23:31:19
    记得大一学C语言的时候,觉得黑白窗很无聊,后来在网上找到了EasyX (一个模仿turbo c的图形库)http://www.easyx.cn ,用它写一些贪吃蛇、扫雷这类有图形界面的游戏来练手。 当时学的时候就很好奇为什么调用这些...
  • qmlDesign1_C++数据qml_qtdesigner_c++界面切换_qml数据_qml.zip
  • vc制作Visual Studio风格的用户界面窗口.visual c++
  • 双击.ui文件进入设计界面,点击编辑即回到代码界面,电脑图标可以选择debug版本也可以选择Profile、Release版本;三角形是运行,带个虫是调试,锤子是构建; 左边是可以选择需要的东西,如布局(Layout
  • Qt c++界面跳转

    千次阅读 2019-06-09 21:09:30
    //跳转界面 this->close();//关闭this指向窗口 // delete this; Dialog1 w1(useredit->text(),&db); w1.show(); w1.exec();//该程序执行完后(对象w1结束),才能执行下面代码 this->show();//...
  • Visual C++界面编程技术

    2011-11-12 15:15:32
    1.Visual C++界面编程技术 source code, 对初学者来说是不错的选择。 2.本人最近会把硬盘整理,有诸多不错的source code 上传。
  • c++界面编程教程及实例,基于硬件API接口的界面编程工具
  • wxWigets一个开源的C++界面框架,跟MFC一样是个界面库框架,可以跨平台。
  • 一个脚本对应一个界面 一个脚本对应一个界面 一个脚本对应一个界面
  • C++ 界面设计须知

    万次阅读 2017-02-20 17:17:57
    C++界面 1. 如果程序的界面不是太复杂,用 SDK 或 MFC 开发都行。 2. 如果程序对界面的美观要求比较高并且改动比较多,用客户端引擎来做比较好,可以参考C#中的WPF编程。 3. 还有现在很多软件都是客户端嵌...
  • C++ 界面开发工具推荐

    2015-09-19 10:23:08
    C++的能界面编程的软件有那些呢?全部举例出来吧。 然后求推荐,选哪个好用,我是业余的自学的兴趣小组的。 据说QT很不错,然后再推荐基本QT的界面编程入门的书吧 我已经有一定编程基础了,高级点的不涉及基础的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 289,203
精华内容 115,681
关键字:

c++界面

c++ 订阅
友情链接: test.rar