[原创]使用MFC界面库LibUIDK制作超酷界面

zz使用界面库LibUIDK制作界面 LibUIDK简介:LibUIDK是专业开发Windows平台下图形用户界面的开发包,该开发包基于Microsoft的MFC库。使用此开发工具包可轻易把美工制作的精美界面用VC实现,由于使用LibUIDK创建的所有窗口都支持控件的从控件工具栏中拖入创建,所以极大的提高了新产品的开发速度,并大大增强图形用户界面(GUI)的亲和力。LibUIDK还可以使您的软件轻松具有当今流行的换肤功能,以提高产品 阅读详情

LibUIDK简介:

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

LibUIDK的目标用户:
任何使用Microsoft Visual C++ 6.0、Microsoft Visual C++ 2003、Microsoft Visual C++ 2005、Microsoft Visual C++ 2008或Microsoft Visual C++ 2010的程序开发人员。

主要特点:

快速创建窗口:
使用LibUIDK创建一个窗口与VC创建一个对话框一样方便,所见即所得的操作方式,极易上手。UIShop在设计时尽量模拟VC6.0创建一个对话框那样来创建UI窗口。
支持换肤:
你可以为同一个应该程序创建多个不同的皮肤,每个皮肤可以有不同的外观,不同的控件布局,也就是说,同一个控件在不同的皮肤中可以位于不同的位置,这样就为不规则窗口中重新布置控件的位置提供了支持。
皮肤与代码的分离:
程序员可以不必等到美工把所有的图片全部做好就可以开始编码,在工程前期,程序员可以使用Windows自带的画图软件简单创建一些纯色的底图而在上面创建控件,等美工把图片做好后替换一下即可,不需要修改代码。并且,如果由美工使用皮肤编辑器UIShop创建皮肤,可以直接看到程序最终的效果。而不必先把图片交给程序员接入代码中编译到源工程后才能查看界面效果。软件发布后也可以由软件爱好者为您的软件设计皮肤而不需要重新编译您的程序。更激动人心的是,UIShop创建皮肤非常简单。
支持png, jpg等格式。


 

为什么选择LibUIDK?

1. 加快开发速度:

开发一个中等规模的UI产品, 大约需要一个熟练掌握MFC的开发人员写三个月(并且还不包含Debug的时间). 而使用LibUIDK, 可以提高6-8倍的效率, 一般10-15天就可以完成. 这不仅节约了时间成本, 还节约了财力成本. 最重要的是, 您可以快速推出产品, 而使您在与您的竞争对手的较量中处理优势地位. LibUIDK使您的开发由手工作坊式变为机械化大生产式。

2. 节约成本:

使用LibUIDK开发产品,不仅所需时间大为减少, 所需人力也大大减少,通常情况,只需要1个人来开发界面。所以会使贵公司在人力资源方面减少投入。

3. 减小程序Bug数量:

一般一个中等规模产品的UI大约有5000-10000行代码, 按每100行代码1个Bug的概率, 可能整个UI有50-100个Bug. 而LibUIDK经过3年多的发展和数万用户的使用, 系统已经非常稳定可靠, 所以可以大幅减少您的产品的UI部分的Bug数量,节约大量的Debug时间。

4. 更容易对客户的需求做出改变:

一个产品在开发过程中, 常常会根据客户的要求, 进行反复修改. 大量的修改常令程序员感到无所适从. 由于LibUIDK采用所见既所得的方式生成代码, 所以修改起来非常方便.

5. 贵公司的GUI开发能力可能不足:

如果贵公司的专业领域不在GUI的开发, 但临时有项目需要较高水平的GUI规格. 那您可以使用LibUIDK来进行开发.

6. 需要制作高级用户界面:

MFC制作高级用户界面比较复杂, 但项目的需求又需要制作高质量用户界面, 比如一些多媒体播放器界面, IM聊天软件等. 那么您可以使用LibUIDK来定制. LibUIDK使您开发用户界面仅受限于想像力, 而不是受限于技术.

 

支持列表:

 Microsoft Windows 2000, XP, Win2003, Vista or Win7.
Microsoft Visual C++ 6.0, Microsoft Visual C++ 2003, Microsoft Visual C++ 2005, Microsoft Visual C++ 2008, Microsoft Visual C++ 2010.

 

创建第一个基于LibUIDK的程序

    LibUIDK的皮肤编辑器提供了基于LibUIDK的应用程序创建向导,使用向导,您可以快速创建一个基于LibUIDK的工程。
一、打开皮肤编辑器,选择菜单【File/New Visual C++ Project...】,如下图:

在弹出的“New Project”对话框中,您可以像设置基于MFC的工程那样,设置一些工程选项,如下图:

 

使用应用程序创建向导,您可以创建基于VC6、VC2003、VC2005、VC2008的工程。向导直接生成工程所需的文件和一个基本的界面,你使用Visual C++,就可以直接编译生成的工程,并且运行编译之后的可执行文件。与您创建MFC工程相似,LibUIDK工程创建向导也允许您创建工程时指定工程是否支持数据库、ActiveX、Sockets等。当您需要界面使用png、jpg等格式时,您可以选中“Gdiplus”选项,LibUIDK将使用GDI+技术来支持这些图像格式,当然,如果你选择了这个选项,那么在您发布产品时,要包含Gdiplus.dll这个文件。
输入工程名和选择工程存放路径后,点击“OK”按钮,就可以创建出一个LibUIDK工程。使用相应的Visual C++版本编译后运行界面如下:

文件结构如下:

Bin---界面文件夹,包含了界面所需要的背景图片、界面布局定义文件等,也是编译成功的可执行文件存放路径
res---程序中图标文件存放路径
MainFrm.cpp和MainFrm.h---程序主界面类
ReadMe.txt---描述工程信息的文本文件
Resource.h和Test.rc---工程中使用到的资料的ID定义,如字符串、菜单、对话框资料的ID。注意,界面中窗口及控件的ID不在这个文件中定义,而是由皮肤编辑器自动生成,定义在Bin文件夹下的Resource.h中。
SstaAfx.cpp和StaAfx.h---全局变量、头文件等定义。
Test.clw---VC6类信息临时文件。
Test.cpp和Text.h---应用程序类
Test.dsp和Test.dsw---VC6工程文件

生成工程文件之后,您就可以像开发MFC对话框程序那样,来开发基于LibUIDK的项目了。
9. 创建其它从CUIWnd派生的子窗口,以完成整个应用程序的GUI部分。

libuidk MFC贴图界面库高级UI设计实战v7.5 MFC(Microsoft Foundation Classes)作为Windows平台上历史悠久的界面开发框架,凭借其与Windows API的深度集成,广泛应用于企业级桌面软件开发。然而,随着现代UI设计理念的不断演进,MFC默认的界面风格显得过于陈旧,难以满足用户对视觉体验和交互感受的高要求。为了解决这一问题,开发者们开始借助第三方UI库来提升MFC应用的视觉表现力。其中,libuidk。 阅读详情

相关推荐

VC界面设计皮肤控件-LibUIDK

里面有VC皮肤控件设计库,里面有使用说明。LibUIDK!

LibUIDK:打造专业级Windows图形用户界面的利器

LibUIDK:打造专业级Windows图形用户界面的利器 项目介绍 LibUIDK,全称为LibUIDevelopment Kit,是一款专为Windows平台设计的高级图形用户界面(GUI)开发工具包。它最初作为商业界面库,于2019年9月8日正式开源,成为国内首款开源的高级界面开发工具。LibUIDK基于Microsoft的MFC库,旨在帮助开发者轻松实现如QQ、360安全卫士等软件的精美界...

gitblog_00469的博客 771

自己整理的一个简单界面库(基于MFC)

自己整理的一个简单界面库(基于MFC),支持控件包括:Static、Button、Edit、Slider、Progress、ComboBox、RadioBox、CheckBox。

使用MFC界面库LibUIDK

LibUIDK简介: LibUIDK是专业开发Windows平台下图形用户界面的开发包,该开发包基于Microsoft的MFC库。使用此开发工具包可轻易把美工制作的精美界面用VC实现,由于LibUIDK采用所见即所得的方式创建产品界面,所以极大的提高了产品的开发速度,并大大增强图形用户界面(GUI)的亲和力。LibUIDK还可以使您的软件轻松具有当今流行的换肤功能,以提高产品的竞争力。 ...

u011269801的专栏 2041

标准MFC WinSock ActiveX控件开发实例(II)高级篇

主要利用VARIANT类型作参数进行的网络数据传送和接收,以及SAFEARRAY,BSTR的详细使用方法。 另外还提供该控件在VC,VB下的调用方式以及相关数据的处理。 关键字:ActiveX,Socket,VARIANT, SAFEARRAY,BSTR。 回顾:在上一篇文章《标准MFC WinSock ActiveX控件开发实例》中我们详细介绍了控件的开发过程,以及接口和事件的 添加和响应方法。现在我们将继续上次没有写完的控件继续进行开发,并完善作为一个WinSock控件应该具备的功能。 二、按照前一篇文章提到的知识,现在我们来添加两个新的接口分别是SendData()和GetData(),它们看起来如下: //网络数据发送,在指定的超时时间内进行发送然后返回,成功返回实际发送字节数,否则返回负数 long CMFCWinSockCtrl::SendData(const VARIANT FAR& Data, const VARIANT FAR& DataType, const VARIANT FAR& DataLength, const VARIANT FAR& TimeOut) { // TODO: Add your dispatch handler code here return 0; } //获取数据,并指定获取数据的超时时间,返回实际获取到的数据长度,否则返回负数 long CMFCWinSockCtrl::GetData(VARIANT FAR* Data, const VARIANT FAR& DataType, const VARIANT FAR& DataMaxLength, const VARIANT FAR& TimeOut) { // TODO: Add your dispatch handler code here return 0; }   两个接口的参数除了第一个参数外,其它都类似。SendData()是发送数据,不要求将数据带回,因此直接用 VARIANT,而GetData()则要求将数据带回来给调用者,因此定义为 VARIANT *类型,第二个参数DataType故名思义是定义所传送或接收数据的类型,第三个参数是传送或接收数据的长度,这里的长度以char作为一个长度,假如传入的类型是int类型,则长度为4,如果定义的是字符串,一个中文字符占用2个长度。最后一个参数,是网络发送或读取时的超时时间。 三、为Connect()接口添加源代码,看起来如下: //网络数据发送,在指定的超时时间内进行发送然后返回,成功返回实际发送字节数,否则返回负数 long CMFCWinSockCtrl::SendData(const VARIANT FAR& Data, const VARIANT FAR& DataType, const VARIANT FAR& DataLength, const VARIANT FAR& TimeOut) { // TODO: Add your dispatch handler code here if(!OnlySock) return -1;//网络尚未开始建立连接 int gDataType = VariantToLong(DataType); long gDataLength = VariantToLong(DataLength); int gTimeOut = VariantToLong(TimeOut); if(gDataType < 0) return -2; if(gDataLength <= 0) return -2; if(gTimeOut < 0) return -2; switch(gDataType) { case 0://默认形式,这时如果发现Data为整型数组,将不进行任何转换,直接把一个int传给一个char传送(数据可能溢出范围) case 1://当指定该值为1时,当Date为长整型数组时,将把一个long转换成四个char传送 case 2://当指定该值为2时,当Date为整型数组时,将把一个int转换成四个char传送 case 3://当指定该值为3时,当Date为无符号短整型数组时,将把一个unsigned short转换成两个char传送 case 4://当指定该值为4时,当Date为BYTE数组时,将把一个BYTE转换成一个char传送 case 5://当指定该值为5时,当Date为短整型数组时,将把一个short转换成两个char传送 case 6://当指定该值为6时,当Date为浮点型数组时,将把一个float转换成四个char传送 case 7://当指定该值为7时,当Date为双精度数组时,将把一个double转换成八个char传送 break; default://如果不在上面取值范围内,将按当前的Data相应类型进行传送 break; } timeval tv; fd_set fdwrite; int len = 0; long m = 0; long n = 0; long changetype = 0;//将浮点型数据进行类型转换,再进行传送 VARIANT gData; VariantInit(&gData); //送出信息至服务器 FD_ZERO(&fdwrite); tv.tv_sec = gTimeOut;//指定时间后返回 tv.tv_usec = 0; FD_SET(OnlySock,&fdwrite);//是否可以发送数据 select(0,NULL,&fdwrite,NULL,&tv); char *buffer = NULL; if(FD_ISSET(OnlySock,&fdwrite)) { switch(Data.vt) { case VT_BSTR://按字符串形式发送 buffer = _com_util::ConvertBSTRToString(Data.bstrVal); break; case VT_BYREF|VT_UI1: //按BYTE*形式发送 buffer = new char[gDataLength]; memcpy(buffer,Data.pbVal,gDataLength); break; case VT_BYREF|VT_I1://按 char * 发送 buffer = new char[gDataLength]; memcpy(buffer,Data.pcVal,gDataLength); break; case VT_ARRAY|VT_I4://以长整型数组发送 gData.vt = VT_I4; if(gDataType!=0)//long = char*4 { //sizeof(long),在这里一个长整型的长度为4个char buffer = new char[gDataLength]; for(m=0,n=0; n>24)&0xff; buffer[m++] = (gData.lVal>>16)&0xff; buffer[m++] = (gData.lVal>>8)&0xff; buffer[m++] = gData.lVal&0xff; } } else//long = char*1 //数据可能溢出 { buffer = new char[gDataLength]; for(m=0,n=0; n<gDataLength; n++) { SafeArrayGetElement(Data.parray,&n,&gData.lVal); buffer[n] = (char)gData.lVal; } } break; case VT_ARRAY|VT_INT://以整型数组发送 gData.vt = VT_INT; if(gDataType != 0) { //一个int等于四个char buffer = new char[gDataLength]; for(m=0,n=0; n>24)&0xff; buffer[m++] = (gData.intVal>>16)&0xff; buffer[m++] = (gData.intVal>>8)&0xff; buffer[m++] = gData.intVal&0xff; } } else { buffer = new char[gDataLength]; for(n=0; n<gDataLength; n++) { SafeArrayGetElement(Data.parray,&n,&gData.intVal); buffer[n] = (char)gData.intVal; } } break; case VT_ARRAY|VT_UI1://以BYTE数组发送 gData.vt = VT_UI1;//一个char等于一个BYTE不必进行转换 buffer = new char[gDataLength]; for(n=0; n<gDataLength; n++) { SafeArrayGetElement(Data.parray,&n,&gData.bVal); buffer[n] = gData.bVal; } break; default://在这里没有一一列出其它类型,剩下的就由阁下进行数据转换处理了,我就偷懒了^_^ return -3;//传入的数据类型不被支持 } len = send(OnlySock, buffer, gDataLength, 0);//发送数据 delete[] buffer; buffer = NULL; if (len>24)&0xff; buffer[1] = (lData>>16)&0xff; buffer[2] = (lData>>8)&0xff; buffer[3] = lData&0xff; //4个char组成一个long lData_2 = ((buffer[0]&0xff)<<24) + ((buffer[1]&0xff)<<16) + ((buffer[2]&0xff)<<8) + (buffer[3]&0xff); 四、现在来看看GetData()的处理,具体实现,请看如下代码: // TODO: Add your dispatch handler code here if(!OnlySock) return -1;//网络尚未开始建立连接 int gDataType = VariantToLong(DataType); long gDataMaxLength = VariantToLong(DataMaxLength); int gTimeOut = VariantToLong(TimeOut); if(gDataType < 0) return -2; if(gDataMaxLength <= 0) return -2; if(gTimeOut < 0) return -2; switch(gDataType) { case 0://默认形式,这时如果发现Data为整型数组,将不进行任何转换,直接把一个int传给一个char传送(数据可能溢出范围) case 1://当指定该值为1时,当Date为长整型数组时,将把一个long转换成四个char传送 case 2://当指定该值为2时,当Date为整型数组时,将把一个int转换成四个char传送 case 3://当指定该值为3时,当Date为无符号短整型数组时,将把一个unsigned short转换成两个char传送 case 4://当指定该值为4时,当Date为BYTE数组时,将把一个BYTE转换成一个char传送 case 5://当指定该值为5时,当Date为短整型数组时,将把一个short转换成两个char传送 case 6://当指定该值为6时,当Date为浮点型数组时,将把一个float转换成四个char传送 case 7://当指定该值为7时,当Date为双精度数组时,将把一个double转换成八个char传送 break; default://如果不在上面取值范围内,将按当前的Data相应类型进行传送 break; } timeval tv; fd_set fdread; int len = -3;//如果找不到该连接,则返回-3 long n = 0; long m = 0; long changetype = 0; VARIANT gData; VariantInit(&gData); char *buffer=NULL; buffer = new char[gDataMaxLength+1]; memset(buffer, 0, gDataMaxLength+1); FD_ZERO(&fdread); tv.tv_sec = gTimeOut;//超过指定时间后返回 tv.tv_usec = 0; FD_SET(OnlySock,&fdread);//是否可以读取数据 select( 0,&fdread,NULL,NULL,&tv); if(FD_ISSET(OnlySock,&fdread)) { len = recv(OnlySock, buffer, gDataMaxLength, 0); if (len<=0) { delete[] buffer; return -102;//无法读取数据,对方可能已断开连接 } if(lenvt) { case VT_BSTR://按字符串形式接收 buffer[gDataMaxLength] = '\0'; Data->bstrVal = _com_util::ConvertStringToBSTR(buffer); break; case VT_BYREF|VT_UI1: //按BYTE*形式接收 memcpy(Data->pbVal,buffer,gDataMaxLength); break; case VT_BYREF|VT_I1://按 char * 形式接收 memcpy(Data->pcVal,buffer,gDataMaxLength); break; case VT_BYREF|VT_I4://以长整型指针接收 buffer[gDataMaxLength]='\0'; for(n=0; nplVal[n] = buffer[n]; } break; case VT_ARRAY|VT_I4://以长整型数组接收 gData.vt = VT_I4; if(gDataType != 0) { for(m=0,n=0; n<gDataMaxLength;n++) { gData.lVal = ((buffer[m]&0xff)<<24) + ((buffer[m+1]&0xff)<<16) + ((buffer[m+2]&0xff)<parray,&n,&gData.lVal); m = m+4; } } else { for(n = 0; nparray,&n,&gData.lVal); } } break; case VT_ARRAY|VT_INT://以整型数组接收 gData.vt = VT_INT; if(gDataType != 0) { for(m=0,n=0; n<gDataMaxLength;n++) { gData.intVal = ((buffer[m]&0xff)<<24) + ((buffer[m+1]&0xff)<<16) + ((buffer[m+2]&0xff)<parray,&n,&gData.intVal); m = m+4; } } else { for(n = 0; nparray,&n,&gData.intVal); } } break; case VT_ARRAY|VT_UI1://以BYTE数组接收 gData.vt = VT_UI1; for(n = 0; nparray,&n,&gData.bVal); } break; default://其它类型,请各位看官自行实现处理,嘿嘿 delete[] buffer; return -3;//无法识别传入的数据类型 } } else { delete[] buffer; return 0;//网络数据读取超时 } VariantClear(&gData); delete[] buffer; return len; 五、接下来,我们看看VC和VB如何调用该控件: VC调用控件方式: 新建一对话框工程,然后在工程中添加该控件,设置如下图: 图一 创建新对话框工程,并加入控件 响应控件的断网和数据到达事件,设置如下图: 图二 响应控件的两个事件 添加相应代码,看起来如下: void CTestMFCWinSockDlg::OnRecvSockEventMfcwinsockctrl1() { // TODO: Add your control notification handler code here SAFEARRAYBOUND Bound[1];//一维数组 Bound[0].lLbound=0; Bound[0].cElements=100;//该一维数组最大接收100个元素 VARIANT *data; data = new VARIANT; VariantInit(data); data->vt = VT_ARRAY|VT_I4;//指明为长整型数组 data->parray = SafeArrayCreate(VT_I4,1,Bound);//创建SAFEARRAY结构 long l = m_sock.GetData(data, COleVariant((long)0), COleVariant((long)100), COleVariant((long)3)); if(l<=0) { ;//在这里判断出错信息,并作相应处理,我就偷懒了. } char pData[100]={0};//这里以字符数组显示结果 long change = 0; for(long n=0; nparray,&n,&change); pData[n] = (char)change; } CString mess; mess.Format("%s",pData); AfxMessageBox(mess); SafeArrayDestroy(data->parray); delete data; } void CTestMFCWinSockDlg::OnCloseWinsockMfcwinsockctrl1() { // TODO: Add your control notification handler code here m_sock.DisConnect();//调用断开连接接口 AfxMessageBox("服务器断开了该次连接,请检查!"); } void CTestMFCWinSockDlg::OnConnect() { // TODO: Add your control notification handler code here UpdateData(TRUE); if(!m_sock.Connect(COleVariant(m_ip),COleVariant(m_port))) AfxMessageBox("与服务器建立连接失败,请确认服务器是否存在!"); } VB调用控件方式: VB时面调用要方便很多,这得益于VB的很多自动化功能,请看下图: 图三 VB调用控件方法 同样,双击我们的控件,然后添加控件事件,如下图: 图四 VB响应控件事件 然后,添加相关代码如下: Private Sub Command1_Click() MFCWinSock1.Connect CStr(ip), CLng(port) End Sub Private Sub Command2_Click() MFCWinSock1.SendData "SendData: 欢迎使用!", 0, 50, 3 End Sub Private Sub MFCWinSock1_CloseWinsock() MFCWinSock1.DisConnect MsgBox "服务器断开了连接,请检查!" End Sub Private Sub MFCWinSock1_RecvSockEvent() Dim data As Variant Dim data2(100) As Long Dim data3 As String Dim l As Long data = data2 '在VB里当把一个Variant变量data等于另一个确定变量data2时,data将被初始化为与data2相同的类型变量 'data = data3 '如果让data等于data3,那么data将变成字符串型的变量参数 l = MFCWinSock1.GetData(data, 0, 100, 3) '这时data里面已存放了接收到的数据 data3 = data(0) '这里只显示接收到的首字符编码 MsgBox data3 End Sub 大家可以看到,对于SAFEARRAY类型的数据进行相关处理也并不可怕,由于在源码里给出了具体代码和详细注解,在这里我就不再赘述了, 至于BSTR和char *类型的数据,相信不用我多说,大家也已经知道如何使用了。 结束语:   全文至此暂告一段落,本文向大家展示了MFC ActiveX控件的魅力,以及所用的VARIANT类型参数,还详细给出了WinSock的开发代码, 以用在VC,VB的调用方法,由于这段时间忙于一些新项目的开发,因此没办法花太多时间进行详细解释,所以很多地方都直接给出源代码 再加上注解,而没有进行通俗的讲解,还请各位读者仔细查看源代码。 本控件目前只能作为客户端,阁下还可以继续进行完善,比如进行端口的监听,实现服务器的相关处理等等,但这已经不是本文的目的, 授人以鱼,不如授人如渔,剩下的功能,就由各位读者去实现了,也欢迎与我进行交流,谢谢! 另外:本文的示例,需要一个服务器程序,大家可以在网上随便下载一下进行测试,我就不提供了。 声明: 部分资料来源于网络,本文所用的所有源代码仅供非商业用途,并请保留原版权,否则后果自负! 欢迎大家拍砖,指正错误或不足的地方,一起探导更好的方法。 欢迎访问www.59186618.com,感谢您的支持!

LibUIDK 图形界面控件 5.5版

LibUIDK 图形界面控件 5.5版 LibUIDK 图形界面控件 5.5版

LibUIDK 学习------登录对话款

先使用UIShop界面设计器画出基本的界面,如下所示:【此界面主要用到了:<Aa Static Text>,<abl Edit Control>,<Push Button>控件】 属性注意: 1、 框选部分表示界面上十字线条的位置,用于界面拉伸的时候从这个位置开始 2、Title Bar Height 这个属性用于设置当前鼠标可以拖拽移动的区域高度 0:不可以拖拽 -1:整个对话款可拖拽 3、如下界面添加类的时候,直接可以创建继承【CUIWnd..

u011269801的专栏 845

基于MFC的Windows平台高级图形用户界面开发工具包_LibUIDK_专业级界面库_商业级开源界面框架_所见即所得UI设计器_高效开发工具_美工友好型界面引擎_支持换肤功能_降.zip

基于MFC的Windows平台高级图形用户界面开发工具包_LibUIDK_专业级界面库_商业级开源界面框架_所见即所得UI设计器_高效开发工具_美工友好型界面引擎_支持换肤功能_降.zip

Windows C++界面库

记得大一学C语言的时候,觉得黑白窗很无聊,后来在网上找到了EasyX (一个模仿turbo c的图形库)http://www.easyx.cn ,用它写一些贪吃蛇、扫雷这类有图形界面的游戏来练手。 当时学的时候就很好奇为什么调用这些函数就能绘制图形,后来从网上了解到了Windows编程,于是从淘宝淘了本《Windows程序设计》看了起来,当时看的时候还有点吃力。 趁着大一结束后的那次暑假我看完了王

优快云文章已停止维护,后续文章会在 https://blog.hufeifei.cn 持续更新 1万+

【多元统计分析】均值向量和协方差阵的检验——spss上机实验

均值向量和协方差阵的检验——spss上机实验 #参考书目为《多元统计分析》(第五版)——何晓群.中国人民大学出版社 #如有错误,请指正!谢谢~ #关注公众号搜索同名文章获取数据~ 习题2.3 现选取内蒙古、广西、贵州、云南、西藏、宁夏、新疆、甘肃和青海等9个内陆边远省区。选取人均GDP、第三产业比重、人均消费支出、人口自然增长率及文盲半文盲人口占15岁以上人口的比例等5项能较好的说明各地区社会经济发展水平的指标,验证边远及少数民族聚居区的社会经济发展水平与全国平均水平间有无显著差异。 将输入导入spss

suansuannainaizi的博客 3万+

使用光流进行 Warp 的流程

光流描述了图像帧中每个像素的运动。前向光流:描述了帧中每个像素在帧中的移动位置。后向光流:描述了帧中每个像素在帧​ 中的移动位置。水平方向的位移(x 方向),即每个像素水平移动了多少像素。垂直方向的位移(y 方向),即每个像素垂直移动了多少像素。使用光流进行 Warp 的流程Warp 是通过光流对图像进行变换的操作,旨在将前一帧的像素根据光流场映射到下一帧的对应位置。Step 1: 计算光流我们首先需要通过光流网络(如 RAFT)来估算两帧之间的光流。我们可以获得前向光流(从帧​ 到帧。

qq_44199605的博客 2108

C++界面库

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

少得多惑的博客 2万+

Zotero内存占用与存储优化:从根源解决卡顿与空间不足

文献管理软件在学术工作中扮演着重要角色,其核心原理是通过数据库管理元数据与附件文件,实现文献的快速检索与组织。然而,随着文献库规模增长,软件的资源管理机制可能面临挑战,尤其是内存占用与存储空间优化问题。从技术价值看,高效的附件管理策略不仅能提升软件响应速度,还能确保数据安全与可移植性。在实际应用场景中,研究者常遇到软件卡顿、存储目录膨胀等痛点,这通常与附件存储模式、缓存机制及数据库维护有关。本文聚焦于Zotero这一主流工具,针对其内存占用高、文件无法删除等常见问题,提供了外置存储、链接附件、数据库维护等系

weixin_34209060的博客 454

MFC UI界面库

Xtrme toolkit,BCGControlBar,SkinMagic,AppFace,Skin++,Uskin++,SYGUI,LibUIDK,GuiToolkit,GardenUI等等,除了后两种一个是开源,一个是免费的外,其余的都是收费的。 The Ultimate Toolbox http://www.codeproject.com/KB/MFC/Ulti...

blogfeifei 1712

SAP FICO CK40N批量发布标准价:常见报错排查与实战解决指南

本文详细解析了SAP FICO模块中CK40N批量发布标准价的常见报错及解决方案。从物料选择、成本核算到最终发布的全流程,提供了针对'已有标准成本估算记号'等典型报错的实战处理技巧,并分享了预防性维护与批量处理的高效方法,帮助财务人员提升工作效率。

weixin_29234509的博客 304

机器学习笔记 - 神经辐射场(NeRF)的简要概述

神经辐射场十分重要。在表示和渲染 3D 场景领域,神经辐射场 (NeRF) 在准确性方面取得了巨大突破。给定底层场景的多个图像,NeRF 可以从任意视点重建该场景的高分辨率、2D 渲染图。与局部光场融合 (LLFF) 和场景表示网络 (SRN) 等现有技术相比,NeRF 更能够捕获场景外观和几何形状的复杂组成部分(例如,依赖于视图的反射和复杂的材料)。NeRF的研究目的是合成同一场景不同视角下的图像。

学以致用 知行合一 1693

使用MFC界面库LibUIDK制作超酷界面

<br />原作者:psbeyond    源出处:优快云    发布者:施昌权    发布类型:转载    发布日期:2008-11-13<br /><br />LibUIDK简介:<br />LibUIDK是专业开发Windows平台下图形用户界面的开发包,该开发包基于Microsoft的MFC库。使用此开发工具包可轻易把美工制作的精美界面用VC实现,由于使用LibUIDK创建的所有窗口都支持控件的从控件工具栏中拖入创建,所以极大的提高了新产品的开发速度,并大大增强图形用户界面(GUI)的亲和力。Li

个人开发记录 2576

无线通信技术及其在机器人中的应用

本文系统阐述了无线通信技术在机器人领域的应用框架与技术选型。首先构建了无线通信的三层理论架构:物理层解决信号传输问题,链路层处理接入控制,网络层实现组网管理。随后详细分析了主流无线技术的特性与适用场景:BLE适用于低功耗传感器节点,Wi-Fi适合高带宽视频传输,5G专网满足工业AGV的广域覆盖需求,星闪技术凭借20μs超低时延和4096台并发连接能力,为高端机器人应用提供突破性解决方案。通过鄂尔多斯隆基5G专网等典型案例,验证了5G在工业AGV规模化部署中的优势,并展望了通感算智融合、星闪+5G协同等未来发

weiyvyy的博客 1114

LibUIDK 开源项目教程

LibUIDK 开源项目教程 1. 项目介绍 LibUIDK 是一个专业的 Windows 平台下图形用户界面(GUI)开发包,基于 Microsoft 的 MFC 库。它最初是一个商业界面库,于 2019 年 9 月 8 日开源。LibUIDK 的主要目标是帮助开发者快速创建类似于 QQ、360 安全卫士等软件的精美界面。 LibUIDK 采用所见即所得的方式创建产品界面,极大地提高了产品的开发...

gitblog_01066的博客 955

SAP 角色继承、派生

角色继承、派生 继承:是指两个角色Role形成母子关系。子角色的所有菜单、授权都源于母角色,并与母角色保持一致。母角色与子角色是1对多的关系。 继承关系:新建子角色继承母角色中的事务(后续通过复制,将母角色授权数据复制至子角色) 派生概念:将母角色中的授权数据派生至子角色中。 业务场景:方便批量修改子角色权限。若有继承关系,只需要修改母角色,然后通过母角色派生功能,从而批量修改子角色授权数...

willieyuan的博客 1万+

STM32cubemx配置驱动DHT11模块

本篇文章将带大家学习使用DHT11湿温度模块,使用这个模块可以获取当前的温度和湿度数据。DHT11可以用于智能家居,蔬菜大棚等项目当中适用范围广。DHT11 是一种数字式温湿度传感器,由杜邦公司推出。它可以测量环境中的温度和湿度,并将测量结果以数字形式传输给微控制器或其他电子设备,适用于通过数字信号读取环境温湿度的应用场景。DHT11 传感器使用单总线数据交换协议,可以通过一个 I/O 引脚进行控制和数据传输。

m0_49476241的博客 5912

LibUIDK:助力高效开发Windows平台图形用户界面

LibUIDK:助力高效开发Windows平台图形用户界面 1. 项目基础介绍及编程语言 LibUIDK 是一个开源项目,旨在为Windows平台下的图形用户界面开发提供高效、便捷的解决方案。该项目基于著名的MFC(Microsoft Foundation Class)库,主要使用C++和C两种编程语言进行开发。通过LibUIDK,开发者可以轻松地将美工制作的精美界面用Visual C++实现,大...

gitblog_01010的博客 927

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

vs 2008 界面开发调研

LibUIDK贴图  BCG,xtremes是做vs或office效果最强大的mfc界面库,libuidk是做贴图界面最强大的mfc界面库。  skin++这类hook类型的界面库,基本上没有什么价值,只会使你的程序变得不稳定。它并不会对你的开发界面的过程有任何帮助的。skinse这种界面库和libuidk开发界面的模式应该差不多吧?都是在界面编辑器中创建窗口和控件吧?不过我看了一下,他们不是

心静如水 2901

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

国内各个界面库比较,告诉你怎么选择界面库?

<br />目前网络上的界面库多彩多样。这里以个人的观点,来评价一下界面库。如果有不当的地方望批评指出。<br /> <br />1 Skin++(www.uipower.com)<br />      该界面库是基于WIN32的界面库,以上海勇进公司的形式来运作,公司规模10人内,开发人员5人左右。05年发布第一个版本以来,运作时间较长。但是产品和目前最新出的界面库比较起来,略显逊色。(可能不了解的朋友不信,呵呵~~)可以去下载他们的成功案例来看看。比如:呱呱聊天室(www.17guagua.com)、P

SkinSE界面技术 6411

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: [原创]为CEdit设置背景图片
下一篇: [原创]右键加入"命令提示符"
psbeond
博客等级 码龄24年 128粉丝 61原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值