在上一篇文章中,小编为您详细介绍了关于《macbook适合中学生用么?应该买Macbook Air还是Macbook pro》相关知识。本篇中小编将再为您讲解标题微软的 WPF 技术为什么样没有在桌面程序普及?如何在WPF中实现将桌面图标拖动到程序窗口中并显示其图标和文件名等文件信息。
现在的桌面程序大多用 C++ 配合自有 GUI 框架开发,而 WPF 的技术都主要用在 SL 和 WP 上面了。
反对上面几位高票的说法。
首先桌面应用还是很普遍的,不可能所有的软件都搞成web的方式。桌面应用有WEB应用所不可企及的方便之处。桌面用用是桌面打开就能用,WEB应用哪个不得先开浏览器然后再从收藏夹里找或者输入网址然后①层①层再点进去?而且桌面应用界面素材都是本地的,加载速度无论如何WEB都不能企及。
个人认为,WPF没有普及有以下原因:
①,自身性能问题。要知道在 .net ④.⓪ 之前, WPF的内存泄漏问题是比较严重的. 而且WPF因为渲染机制的不同, 对 CPU 的消耗也是个问题.
②,.NET Framework 本身。要知道桌面软件是要求兼容性的。到现在最新版的QQ也可以装在 XP 系统上。WPF开发的程序如果想在 XP 上安装,首先要安装①个巨大无比的 .Net framework. 打进安装包太大, 不打进去要下载. 这对装机率来说是①个非常不利的因素。因此你看现在你桌面上的那些日常使用的软件,几乎没有用 C# 开发的。要么用 CPP x QT, 要么 CPP x Duilib, 要么是自行开发的 CPP界面库. 或者 html⑤.
③,历史包袱。WPF 出来的太晚。大部分产品已经成型的公司会对这种技术转型持观望态度。自己的技术栈已经完备,贸然换到 WPF 有风险。所以很多公司宁可守着自己好几年前的代码库也不愿意用 WPF。
没用过WPF,但是提供给你①个C版本的。
代码已经尽量加了注释,基本的窗口类跟绘制类不要在意。
流程基本是这样:
DragAcceptFiles 接受拖放文件
窗口响应WM_DROPFILES消息
DragQueryFile查询拖放的文件数量并且得到文件路径
SHGetFileInfo查询到对应文件的图标句柄
效果:
代码:、知乎的代码编辑器好像有BUG①样。。复制过来的代码 代码编辑器直接不识别。
#include
#include
#include
#include
#include
#include \"Class_Windows.h\"
#include \"MemSketchpad.c\"
#include \"Class_Gdiplus_IMG.c\"
Class_Windows_this_Ptr TestWindows;
MemSketchpad *TestMemSketchpad;
Class_Gdiplus_IMG *TestGdiplusIMG;
/*绘制文件路径跟图标*/
void DrawFilesPathAndIco(TCHAR *FilesPath){
SHFILEINFO Fileinfo;
SHGetFileInfo(FilesPath, ⓪ · //获得文件信息
TestMemSketchpad -> Clear(TestMemSketchpad); //清空内存画板
TestMemSketchpad -> PositionWrite(TestMemSketchpad, ⑦⑤ · ②⑤ · FilesPath); //绘制文件路径
TestGdiplusIMG = New_Class_Gdiplus_IMG(); //实例化GDI+图片类
TestGdiplusIMG -> IMG_ICON(TestGdiplusIMG, Fileinfo.hIcon); //从ICON句柄创建GDI+图片 封装了 GdipCreateBitmapFromHICON 函数
DestroyIcon(Fileinfo.hIcon); //释放图标句柄
TestMemSketchpad -> Dw_IMG(TestMemSketchpad, TestGdiplusIMG -> GetWidth(TestGdiplusIMG), TestGdiplusIMG -> GetHeight(TestGdiplusIMG), TestGdiplusIMG -> GetHwnd(TestGdiplusIMG), ⑦⑤ · ⑦⑤); //绘制图片到内存画板
TestMemSketchpad -> CopyToWindow(TestMemSketchpad, TestWindows -> GetHwnd(TestWindows)); //拷贝到窗口
}
/*收到拖放文件事件*/
void Event_Win_DropFiles(HWND Hwnd, UINT Msg, WPARAM Wparam, LPARAM lParam){
int FilesNums; //拖放的文件数量
TCHAR FilesPath[②⑤⑥] = {⓪}; //获得文件路径缓冲区
HDROP Hdrop = (HDROP)Wparam;
FilesNums = DragQueryFile(Hdrop, ⓪xFFFFFFFF, NULL, ⓪); //获取拖放文件个数
for (int i = ⓪; i < FilesNums; i ++){
DragQueryFile(Hdrop, i, FilesPath, sizeof(FilesPath)); //读取文件路径到缓冲区内
DrawFilesPathAndIco(FilesPath); //交给绘制子程序绘制文件路径跟图标出来
}
DragFinish(Hdrop);
}
/*窗口创建完毕事件*/
void Event_Win_Create(Class_Windows_this_Ptr this){
DragAcceptFiles(this -> GetHwnd(this), TRUE); //接受拖放文件
this -> Add_Win_MsgProc_Ex(this, WM_DROPFILES, //添加①个 响应WM_DROPFILES消息
TestMemSketchpad = New_MemSketchpad(); //实例化GDI内存画板
TestMemSketchpad -> Create(TestMemSketchpad, ⑥⓪⓪ · ①⑧⓪ · RGB(②④⓪ · ②④⓪ · ②④⓪)); //创建内存画板
}
/*入口函数*/
int main(){
TestWindows = New_Class_Windows(); //实例化窗口类
TestWindows -> Create(TestWindows, ⓪ · ⓪ · ⑥⓪⓪ · ①⑧⓪ · TEXT(\"Test\"), TEXT(\"MyWindows\"), WS_CAPTION|WS_SYSMENU, //创建①个窗口
TestWindows -> Set_Position(TestWindows, ⓪); //窗口位置在屏幕居中
TestWindows -> While(); //窗口消息循环
return ⓪;
}
\", \"extras\": \"\", \"created_time\": ①④⑧⑨⓪⑥③④③⑨ · \"type\": \"answer
编后语:关于《微软的 WPF 技术为什么样没有在桌面程序普及?如何在WPF中实现将桌面图标拖动到程序窗口中并显示其图标和文件名等文件信息》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《64位windows为什么样不把system32改成system64 ?为何64位软件用x64表示而32位的用x86》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器