跟我一起玩Win32开发(1):关于C++的几个要点 跟我一起玩Win32开发(2):完整的开发流程 跟我一起玩Win32开发(3):窗口的重绘 跟我一起玩Win32开发(4):创建菜单 跟我一起玩Win32开发(5):具有单选标记的菜单 跟我一起玩Win32开发(6):创建右键菜单 跟我一起玩Win32开发(7):多边形窗口 跟我一起玩Win32开发(8):绘图(A) 跟我一起玩Win32开发(9):绘图(B) 跟我一起玩Win32开发(10):绘图(C) 跟我一起玩Win32开发(11):使…
这里我再次说明一下,我不知道为什么,现在的人那么喜欢走极端,估计是价值观都“升级”了的缘故吧. 我撰写这一系列Win32相关的文章,并不是叫大家一定要用Win32去开发项目,仅仅是给大家了解一下,Win32是个啥东西而已. 另外,在专访中,有些人也误认为我说C++非学不可,那也不是,我也提到过了,C++的学习可以使你懂得更多知识,为你以为学习各种技术打下基础. 今天,我们来了解一下,在应用程序中,如何启动一个进程,然后把这个进程结束掉.实现这一功能有替代方案,即使用.NET库中的System::…
也不知道发生什么事情,CSDN把我的文章弄到首页,结果有不少说我在误人子弟,是啊,我去年就说过了,如果你要成为砖家级人物,请远离我的博客,我这个人没什么特长,唯一厉害的一点就是不相信权威,鄙视砖家,所以,我一直以来都有属于俺自己的编程思想. 就好比当年咏春拳刚浮出江湖的时候,武学界骂声不停,有人说:“这哪像拳?分明是女人拳.”然后不知道什么时候,一位叫叶问的大侠突然牛B起来了,于是,咏春拳的传播速度比其他拳种更快,都传到老外那里去了. 所以,为了继续误人子弟,我决定把这些文章写下去,直到误尽天下…
快捷菜单,说得容易理解一点,就是右键菜单,当我们在某个区域内单击鼠标右键,会弹出一些菜单项.这种类型的菜单,是随处可见的,我们在桌面上右击一下,也会弹出一个菜单. 右键菜单的好处就是方便,它经常和我们正在操作的某个UI元素联系起来,比如我们正在使用文本框输入文本,我们在文本框中右击,就会看到可能有[复制][清空][全选]之类的选项,所以,右键菜单也称为“上下文菜单(Context Menu)”. 一般来说,创建并使用快捷菜单,可以按照以下步骤进行: 1.用资源编辑器创建菜单. 2.当我们在窗口上…
相信大家知道对话框怎么用了,就是先用“资源编辑器”设计一个对话框,然后在代码中加载处理.今天,我向大家分享两个使用对话框的技巧,还是比较实用的.不用担心,先喝杯茶,很简单的,一点也不复杂,总之,看俺写的博客,你不会有思想压力的.放心好了. 这两个技巧分别是: 1.在显示某个对话框时,向对话框传递数据. 这个我相信大家能够理解,就好比咱们在做Web开发的时候,在打开一个页面时,可能会考虑向目标页面传一些参数,如这样http://www.牛B.com/yyy.aspx?tid=19999,是吧,我们…
从CAD2007之后,Autodesk提供了一个新的程序集AcCui.dll,使用这个程序集,我们可以方便地做一些界面方面的操作,比如创建自定义菜单. 下面介绍一下菜单的创建过程: 1.在项目中添加引用:AcCui.dll,这个DLL存放在CAD的安装目录中.但是,好像CAD2007之前的版本里没有这个DLL),我电脑上安装了CAD2004.CAD2005.CAD2008.CAD2010,其中,只有CAD2008和CAD2010中有这个DLL. 2.在代码中添加using: using Auto…
目前我已经掌握的创建CAD菜单方法有两种: COM方式: http://www.cnblogs.com/bomb12138/p/3607929.html CUI方式: http://www.cnblogs.com/bomb12138/p/3600842.html 从程序复杂度来看,COM方式更简单一些,CUI方式较复杂. 从版本特性来看,COM方式更通用一些,CUI方式仅支持CAD2007+的版本. 从兼容性来看,基本一样:在测试程序中,对于CUI方式,我引用的是CAD2008的类库,而最后生成…
当我们要在CAD中创建自定菜单时,可以引用COM组件来实现. 下面是实现方式: 1.新建类库项目,并引用CAD目录(我这里用的是CAD2008)下的acdbmgd.dll.acmgd.dll,并将引用属性中的“复制本地”设为False. 2.添加Com引用:AutoCAD 2008 Type Library. 3.创建类“Main.cs”,并在类头部命名空间上加上修饰: [assembly: CommandClass(typeof(AutoCAD_PopMenuTestCom.Main))] 这…
1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" android:layout_width="mat…
首先声明这个知识我以前不知道,是夏天的时候看到别人在唐工的QQ群里问的,唐工说西门子官方有这个例子.那个时候我因为在忙其他事情,也就没去研究那个右键菜单到底是怎么做的.关于自定义添加右键菜单RegisterConfigureContextMenuCallback相关内容,可以去UGOPEN里研究ConfigureContextMenu这个例子. 结合NXOPEN帮助对照函数一步步去理解,是怎么使用的. 在线帮助地址https://docs.plm.automation.siemens.com/d…
今天,咱们还是接着玩“控件斗地主”,这是我原创的超级游戏,有益身心健康,玩一朝,十年少. 哦,对,脑细胞极速运动了一下,想起了一个问题,这个破问题虽然网上有很多种解决方案,但是,并没有让所有人都解决问题. 不知道大家有没有调用过LoadIconMetric函数,这个函数在静态库Comctl32.lib中有定义(当然,动态库也有),不过,创建项目的时候,默认并没有引用它的,于是,大家知道,解决调用的方法就是在代码中加上: #pragma comment(lib, "Comctl32.lib&quo…
在应用程序中,我们很经常要实现的功能,是Open文件或保存文件对话框,让用户来选择一个或N个文件.本文我将介绍两种思路,第一种方法较为复杂,第二种方法较为简单. 方法一:老规矩 这是一种传统方法,使用GetOpenFileName或者GetSaveFileName函数,看名字就知道,前者用来打开文件,后者是保存文件,这两个函数的用法是一样的,因此,我只演示其中一个. 无论你使用哪个函数,都要涉及一个结构体——OPENFILENAME.关于它的成员,我就不一一来说了,挑几个有用的扯一扯. lStr…
上一篇中我给各位说了一般人认为C++中较为难的东西——指针.其实对于C++,难点当然不局限在指针这玩意儿上,还有一些有趣的概念,如模板类.虚基类.纯虚函数等,这些都是概念性的东西,几乎每一本C++书上都会介绍,而平时我们除了会接触到纯虚函数外,其他的不多用.纯虚函数,你可以认为与C#中的抽象方法或接口中的方法类似,即只定义,不实现.好处就是多态,发何处理,由派生类来决定. 在开始吹牛之前,我先推荐一套视频教程,孙鑫老师的C++教程,共20课,我不是帮他老人家打广告,而是因为孙老师讲的课是我听过的…
我要提醒一下大家,看了我的博文学到的知识,千万不要用于实际开发,不然你会被你的上司骂:“妈的,这些东西哪来的,从来没有人这样做过.”不信你试试,脑细胞被冻结的经理或者技术总监们肯定会这样说的. 如果是一些有X年工作经验(X永远不可能大于100)的程序员肯定会说:“你怎么这么不成熟?”你如果被别人这么说之后,不知道你会不会很伤心,或者很生气? 我呢,曾经被N个人这样教育过,不过你猜猜我当时的心情,我非常高兴,喜悦.为什么呢? 你不妨想想,当一个人说你不成熟的时候,你说他其实在说什么,他其实是在说他…
前面我们在编写Win32应用程序的思路都是: 1.设计窗口类.2.注册窗口类.3.创建窗口.…… 然而,当我们接触控件以后, 会发现一个问题,我们在窗口上放置控件实在不好弄,而资源中的对话框具有图形编辑器,操作起来相对方便. 于是,就有了一个想法:把对话框用作主窗口,那我们在布局控件时就轻松了. 其实这想法在网上已有牛人做了,不过,人家是用Win32汇编干的,当然,要把它变为C++就更简单了. 首先,介绍第一个法子,直接以桌面作为父窗口来创建对话框. 1.创建一个对话框资源,界面就发挥你的设计天…
一提到对话框,相信对它熟悉的人不在少数,更不用说码农们了,你可能会问,对话框和窗口有什么区别吗?本质上是没有区别的,对话框也是一种窗口(前面也说过,控件也可视为子窗口). 最简单的对话框要数MessageBox弹出来的对话框了,是吧?这个函数我有信心,大家都会用的,毕竟很简单. 好的,废话不多扯了,马上开始本文第一件事,创建一个对话框. 对话框作为一种资源,它存放在资源文件中(.rc),如果项目中没有rc文件,第一种方法是在“解决方案资源管理器”中在“资源文件”节点右击,从菜单中选择“添加”-“…
c可以编译#include <Windows.h> //先声明一下消息处理函数 LRESULT CALLBACK MyWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); // 入口点 int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrvInstance, LPSTR lpCommandLine, int cmdShow) { CHAR* cln = "…
我不知道各位,一提起C++,第一感觉是什么?而据俺的观察,许多人几乎成了“谈C色变”.不管是C还是C++,一直以来都被很多人视为相当难学的玩意儿,幸好只是一个C++,没有C--,C**和C//,不然,那还得了?曾记得,某年某月某日,在某论坛上看到有牛人说“C++++”,当时我猜想这是啥玩意儿,后来经过一番顺虅摸瓜,深入调查发现,原来有人作了这么个有趣的等式:C# == C++++. 显然,这个等式也不太正确,C#不仅继承了C++一些特性,也继承了Delphi中的和VB中的一些优点. 好了,这个等…
自从郭大侠和蓉儿离开桃花岛后,最近岛比较寂静,有一种“门前冷落鞍马稀”的感觉.于是,老邪就拿出<九阴真经>认真阅读,同时用迅雷下载经典大剧<汉武大帝>晚上睡觉前看上几集,老邪一向是善于向古圣先贤学习. 大家知道,迅雷有一个监视剪贴板的功能,如果发现你复制剪贴板的内容包含符合迅雷下载地址格式的就弹出新建下载任务窗口. 可能我们也希望在自己的应用程序中也加入这样XX的功能,其实不难,真的,我用老顽童的人格保证,实现该功能是灰常简单的. 我们需要完成两步就行了. 1.调用AddClipb…
有好些时间没写博客了,今天要来耍一下计时器,就是我们常说的Timer,它虽然不是什么复杂的东西,也称不 上牛X,不过,用处还是不少的,对于那些需要每隔一定时间执行一次的任务,那是相当有用. 先来认识一下一对函数,注意,是一对,不是一个. SetTimer——设置并启用计时器: KillTimer——取消计时器. 现在你明白为什么要一对的原因了,就好比进程操作,有启动或创建进程的函数,就肯定要有关闭进程的函数:有GetDC就肯定要伴随着ReleaseDC函数.阴与阳是此消彼长的. 先说SetTim…
GradientFill函数可以对特定的矩形区域或者三角形区域进行渐变颜色的填充.我们先来看看GradientFill函数到底长得什么样子,帅不帅. BOOL GradientFill( _In_  HDC hdc, _In_  PTRIVERTEX pVertex, _In_  ULONG nVertex, _In_  PVOID pMesh, _In_  ULONG nMesh, _In_  ULONG ulMode ); 参数涉及结构体,于是有些人就开始感到痛苦了,调用函数一遇到结构体就会…
在上一个例子中,我们只用到了ListView的Report视图,也就是详细视图.本文我们再把上一篇文章中所用的例子进行一下扩展,例子源码可以到俺的资源区下载. 我们为ListView中显示的数据加上图标,并且允许用户选择显示哪种视图,如大图标,小图标,详细信息等. 因为代码还比较长,我也不希望把代码全部放出来,在写完本文后,我会将源码上传到资源中.当然了,我也不可能说每一行代码都解释一遍,那也不现实,而且,这样也不好,我不能主观地去怀疑读者的领悟能力. 一.准备图标 既然要用到图标,为了简单方便…
用户通过控件与应用程序交互,在吹牛之前,先介绍一个工具,这是官方的工具,使用它,你可以预览常用控件的外观.样式,以及对控进行操作时接收和发送哪些消息.下载地址如下: http://www.microsoft.com/en-us/download/details.aspx?id=4635 我们可以把控件当成特殊的一类窗口,所以,创建控件与创建窗口一样,使用CreateWindow或CreateWindowEx函数,不过,在窗口样式上面记得用上以下两位帅哥: a.WS_CHILD:控件是放在我们的窗…
我们今天继续涂鸦,实践证明,涂鸦是人生一大乐趣. 首先,我们写一个程序骨架子,以便做实验. #include <Windows.h> LRESULT CALLBACK MainWinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); int WINAPI WinMain( HINSTANCE hThisApp, HINSTANCE hPrevApp, LPSTR lpsCmdln, int iShow) { WNDCLASS wc;…
今天我们来欣赏一下用于填充图形的函数,当然我不会逐个去介绍,因为我们参考MSDN直接套参数就可以了. SetDCBrushColor函数有必要扯一下,它的声明如下: COLORREF SetDCBrushColor( __in  HDC hdc, __in  COLORREF crColor ); 第二个参数,通过RGB宏产生COLORREF传进去就可以了,比如这样: SetDCBrushColor(ps.hdc,RGB(211,254,41)); 但是,如果只是调用这个函数,你会发现在绘图的时…
通常情况下,窗口都是一个矩形,不过,调用下面这个函数,可以自定义窗口的形状. int SetWindowRgn( __in  HWND hWnd, __in  HRGN hRgn, __in  BOOL bRedraw ); 第一个参数是窗口的句柄,第二个参数也是一个句柄——HRGN,一个多边形的区域,可以用CreatePolygonRgn函数来创建.第三个参数指定函数调用成功后是否重画窗口,如果窗口还没有显示,就不必了,如果窗口已经显示,可以考虑设为TRUE. 我们创建用于显示窗口形状的区域句…
从本篇开始,我就不吹牛皮,那就吹吹兔皮吧.说说与绘图有关的东东. 要进行绘制,首先要得到一个DC,啥是DC呢?按字面翻译叫设备上下文,也可以翻译为设备描述表,它主要指API为我们封装了一些与显示设备相关的交互操作,我们这里说的是图形的绘制,自然指的是显卡.当然,对于同一客观事物,世界上并不存在唯一的理解方案,技术上的东西最终拿来用的,不应该有硬性的去统一.我们之中的很多人,最大的失败在于,人家说要这样理解他就毫不怀疑地这样理解,权威人士说要这样这样,他就不经过大脑思考地跟着那样那样. 虽然我的母…
帅哥们,美女们,下午好,我又来误人子弟,请做好准备. 今天,我们的目的是,想要实现下图中的这种菜单效果. 就是一种类似单选按钮的菜单,多个菜单项中,同时只有一个会被选中. 首先,我们在资源编辑器中,设计一个菜单资源.这个资源编辑器在管理资源ID的时候,有些问题,有时候不同步更新,有时候会保存不到,反正就会混乱.如果遇到问题,你可以先把菜单设计好,接着打开resource.h,手动把这些ID和它的值改一下.为了使这三个菜单项能形成一个组,必须让它们的ID值是连续的,比如我这里让它们分别为501,5…
关于如何拷贝屏幕并保存,这里已经有现成的例子,我也不必去Copy人家了,我一向不喜欢Copy.这里有一个完整的例子,可以看看. http://msdn.microsoft.com/EN-US/library/windows/desktop/dd183402(v=vs.85).aspx 把屏幕的内容复制到窗口的客户区域中,通常会用BitBlt函数,函数的功能是把一块颜色数据从一个DC复制到另一个DC,这个我也不知道怎么翻译才能通俗一点.这样说吧,就是从源设备上下文的图形表面截取一个矩形区域并且复制…
最近忙于一些相当无聊的事情,还没忙完,不过,博客还是要写的,不然我头顶上会多了几块砖头. 在上一篇博文中,我们浏览了文件,今天我们也浏览一下目录,如何? 浏览目录我们同样有两个规矩,用托管类库的我就不说了,相信大家两分钟就能弄好.重点还是说说第二个规矩,用API方式.我们用到的是Shell函数,一提到Shell,可能有朋友会感到痛苦,因为它很多函数涉及到COM,不过,也没什么了,反正我的哲学理念是立足于实战.所以,我给大家总结了思路. 就拿今天我们要用到的SHBrowseForFolder函数来…