摘要:一、NOTIFYICONDATA结构NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提示消息、图标对应的窗口等内容。其定义为: typedef struct _NOTIFYICONDATA {//以字节为单位的这个结构的大小 DWORD cbSize; //接收托盘图标通知消息的窗口句柄 HWND hWnd; //应用程序定义的该图标的ID号 UINT uID;//设置该图标的属性 UINT uFlags; //应用程序定义的消息ID号,此消息传递给hWnd UINT uCallbackMessage; //图...
阅读全文
随笔分类 - VC/MFC
摘要:1 最简单的办法:添加一个不可见的按钮,设为对话框的默认按钮即可2 重载对话框的PreTranslateMessage消息处理BOOL CSIMDlg::PreTranslateMessage(MSG* pMsg){// TODO: Add your specialized code here and/or call the base classif( pMsg->message ==WM_KEYDOWN){ if(pMsg->wParam == VK_ESCAPE||pMsg->wParam == VK_RETURN) return TRUE;}return CDialog
阅读全文
摘要:最近在写一款山寨的反病毒软件,大致功能已经实现,还有一些细小的环节需要细化。其中,在界面编程中,就用到了给ListCtrl控件着色,查看了网上一些文章,终于实现了。其实说白了,原理很简单,就是ListCtrl在插入一个Item的时候,会发送一个NM_CUSTOMDRAW的消息,我们只要实现这个消息响应函数,并在里面绘制我们的颜色就可以了。但是响应这个消息在VC6.0下需要自己实现:1.在头文件中声明函数:afx_msg void OnCustomdrawMyList( NMHDR* pNMHDR, LRESULT* pResult );2.在cpp文件中添加消息映射:ON_NOTIFY(NM_
阅读全文
摘要:在StatusBar中显示当前时间,如下:1.在String Table中插入一项(注意:状态栏将根据字符串的长度来确定相应窗格的缺省宽度,所以指定为00:00:00就为时间的显示预留了空间)2.添加indicators数组3.在OnCreate函数中设置时钟 :SetTimer(1, 1000, NULL);4.添加WM_TIMER 和 WM_CLOSE的消息响应函数
阅读全文
摘要:对话条是工具栏和无模式对话框相结合的产物,对话条和对话框类似,包含有标准的Windows控件,并且可以通过创建对话框模板来表示对话条。伸缩条功能很强大,我们可以在伸缩条中直接增加CToolBar,CStatusBar和CDialogBar等类创建的控制条,如下:CReBar rb;rb.Create(....);CToolBar tb;tb.Create(...);tb.LoadToolBar(...);//将工具栏加入到伸缩条rb.AddBar(&tb,...);如果需要在伸缩条的段中包含其他的窗口类型(例如动画控件),仅需要将该控件放进对话框模板中,创建对话条,然后利用CReBar
阅读全文
摘要:1.首先在界面上放置一个static text 控件2.修改它的ID,并添加其控件成员变量CStaticm_staticIcon;3.编写函数:
阅读全文
摘要:1.在CMainFrame中添加CSplitterWnd类型的成员变量:2.新建几个派生于类CListView ,CEditView,CtreeView的类3.在CListView ,CEditView的派生类中添加头文件:#include 4.重载OnCreateClient函数程序运行结果:
阅读全文
摘要:UINT DownloadFile(LPVOID pParam){CWnd*pwnd = AfxGetMainWnd();CProgressCtrl*m_Prog = (CProgressCtrl*)pwnd->GetDlgItem(IDC_PROGRESS1);CButton*bStart = (CButton*)pwnd->GetDlgItem(IDB_BTN_START);charfilebuf[512];CInternetSessionnetSession;CStdioFile*fTargFile;intoutfs;CStringszFile,FileSize,KBin,K
阅读全文
摘要:Q: 如何打开一个应用程序?ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW );或ShellExecute(this->m_hWnd,"open","notepad.exe", "c:\\MyLog.log","",SW_SHOW );正如您所看到的,我并没有传递程序的完整路径。Q: 如何打开一个同系统程序相关连的文档?ShellExecute(this-
阅读全文
摘要:1.锁定窗口,不进行刷新m_list.LockWindowUpdate();2.设定列表不进行重画m_list.SetRedraw(FALSE);3.清空列表,删除历史数据m_list.DeleteAllItems();4.窗口解锁,允许刷新。否则系统的视图也会进行闪烁m_list.UnlockWindowUpdate();5.向列表中循环增加记录6.重画列表m_list.SetRedraw(TRUE);
阅读全文
摘要:前面提到了CImageList类的Create(...)函数,虽然MSDN上已经有所解释,但仍有网友问到参数的具体含义,下面就我的理解,对参数进行一次轻量级的剖析 函数原型(其他重载函数请参看msdn):BOOL Create( int cx, int cy, UINT nFlags, int nInitial, int nGrow );cx,cy:图片的实际像素宽与高,没有问题nFlags:创建图像列表的类型,包括4/8/16/24/32/位色,nInitial :创建ImageList初始包括的图像个数nGrow当初始分配的图像个数不够的时候,新增一个图片时,指定图象列...
阅读全文
摘要:Xtrme toolkit,BCGControlBar,SkinMagic,AppFace,Skin++,Uskin++,SYGUI,LibUIDK,GuiToolkit,GardenUI等等,除了后两种一个是开源,一个是免费的外,其余的都是收费的。The Ultimate Toolboxhttp://www.codeproject.com/KB/MFC/UltimateToolbox.aspxGuiToolkit(开源,mfc扩展框架,类似Visual Studio 2003风格)http://www.beyondata.com/default.htmGardenUI(免费,界面效果挺好的,
阅读全文
摘要:这东西真是奇怪,找了半天原因,最终的发现却是让人抓狂,呵呵现象:对话框按ESC或回车都不能关闭窗口(我没有处理PreTransplanteMessage),用spy++看,对话框完全收不到键盘消息原因:我的对话框上有个控件的属性中设置了:Tab Stop,rc文件中看的话就是加上了WS_TABSTOP解决:去掉tab stop风格! 唉,真是!#$%!$%!$%^@%^@#%&*!%$!看来每一行代码都要细细想过之后才加,就像是处理MFC的消息,一样,最后要返回TRUE还是返回FALSE,不想清楚,就很可能会出问题。
阅读全文
摘要:大家都知道,当编写一个win32 console application时,当运行此类程序的时候默认情况下会有一个类似DOS窗口的console窗口,但是有的时候我们只想在程序中运行一段功能代码,不希望显示这个console窗口,让代码执行完毕之后程序自动退出.下面就介绍一下,如何隐藏win32 console application的console窗口因为此种方法是通过设置编译器的链接开关来实现,所以让我们来看一下编译器的链接开关选项(也就是linker选项).首先我们来看一下linker的 /subsystem 选项该选项的语法形式如下:/SUBSYSTEM:{CONSOLE|EFI_AP
阅读全文
摘要:假如你定义了一个位图类,里面包含位图头,位图信息头,调色板,位图数据。然后你按照位图的格式将位图文件读入你的类中,现在你知道了位图的全部信息了。主要信息包含在位图信息头里面,数据则在位图数据缓冲里面。现在的问题是,在Windows下面如何将一张位图画出来,而且现在是如何从数据缓存里面绘画出位图。一般情况,我们都是直接绘制在dc里面,而不是绑定到子控件,让子控件自己绘画,比如picture控件之类的,我觉得提供绘制在dc里面的接口更具有广泛性。现在我知道两种从内存数据绘制彩色位图的2种方法。第一种麻烦一点,第二种则相当直接。方法一:第一步,用CreateCompatibleDC创建跟目标dc的兼
阅读全文
摘要:由于看了一下,比较好理解,暂时先放到这里,待有空再翻译。只是在每节后大致介绍一下讲的内容。感觉写的比较全,无论从消息的原理还是从MFC操作上来说,值得一看,我也在此做个收藏。(一)说明:以下首先对消息进行介绍,然后在消息处理中,使用类向导创建消息循环,这个操作是在vc6.0(或者之下版本)操作的。IntroductionPerhaps one of the most important means of communication in windows is Messages. The traditional program starts at yourmain()function, move
阅读全文
摘要:VC++6.0和VS2005在编写MFC应用程序时,操作方面的差异一直用VC++6.0,对VS2005不太了解,下面简单的熟悉一下VS2005的一下功能,总结一下VS2005在编写MFC时候的应用。1.菜单项:和VC6.0一样,也是找到资源视图,点击menu资源,在上面新建自己的菜单项。只是‘属性’,陈列的方式不同,VS2005陈列在右下角;在VC6.0中,我们对菜单项建立类向导,而在VS2005中,点右键,选择的是:‘添加事件处理程序’,然后再对话框里选择相应的消息类型,在类列表中选择要添加的哪个类中。点击‘添加编辑’按钮即可。2.对话框:和VC6.0一样,也是找到资源视图,点击menu资源
阅读全文
摘要:1、 DLL的概念DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数、变量或类。这些可以直接拿来使用。静态链接库与动态链接库的区别:(1)静态链接库与动态链接库都是共享代码的方式。静态链接库把最后的指令都包含在最终生成的EXE文件中了;动态链接库不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。(2)静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。动态链接库的分类:Visual C++支持三种DLL,它们分别是:(1)Non-MFC DLL(非MF
阅读全文
摘要:WinExecTheWinExecfunction runs the specified application.NoteThis function is provided only for compatibility with 16-bit Windows. Applications should use theCreateProcessfunction.UINT WinExec( LPCSTR lpCmdLine, // 可执行程序的路径,如"c:\\a.exe" UINT uCmdShow // 启动方式);ParameterslpCmdLine [in] Point
阅读全文