博文
转创建有个性的对话框之MFC篇 (2007-10-22 15:42:00)
摘要:
想使自己的软件与众不同就要给软件加点“色”,一个颜色搭配协调的窗口要比windows千篇一律的灰底黑字更能吸引别人的眼球。设想如果html浏览器显示的网页都是白底黑字,还会有那么多的mm喜欢上网吗?可能互联网的人气将下降一半。做个出色的界面对于老手来说可能不在话下,但是对于新手来说还是无从下手,使用BCGControlBar和Xtreme Toolkit是个很好的选择,不过对于一个小程序使用这么大的库未免有头重脚轻的感觉。其实不使用这些庞然大物一样可以做个很“色”的界面,本文就结合CSDN论坛上经常被问起的问题,介绍几个给对话框上色的方法。本文的方法都是针对MFC程序的,其他方法请参看“创建有个性的对话框之ATL/WTL篇”。
第一步:改变对话框的背景颜色
如何改变对话框的背景颜色这个问题常常出现在论坛上,可见大家对Windows默认的灰色对话框是多么不满。MFC程序修改对话框的背景和文字颜色最简单的方法就是调用SetDialogBkColor函数,SetDialogBkColor是CWinApp类的成员函数,以下是该函数的原型:
void CWinApp::SetDialogBkColor(COLORREF clrCtlBk, COLORREF clrCtlText);
请注意,SetDialogBkColor函数并不是对Windows的某个API的封装,他是MFC框架的一部分,所以不使用MFC的程序也就不能享受这种方便。这个函数的使用很简单,在程序的CWinApp派生类的InitInstance函数中添加一行代码就行了:
SetDialogBkColor(RGB(188,197,230),RGB(13,125,188));
图.1 就是运行效果:
图.1 SetDialogBkColor效果图
使用SetDialogBkColor也有局限的地方,那就是所有的控件文字颜色都一样,不能针对不同的控件设置不同的文字颜色,还有就是不能设置Edit控件的颜色。不使用SetDialogBkColor函数,直接编写代码控制对话框的背景颜色和......
转VC++(Create()函数,窗口建立)(2007-10-22 11:11:00)
摘要:BOOL Create(LPCTSTR lpszClassName,//注册类,MFC将注册类封装,我们填写NULL
LPCTSTR lpszWindowName,//窗体名,窗体标题
DWORD dwStyle = WS_OVERLAPPEDWINDOW,//窗体风格
const RECT& rect = rectDefault,//窗体的矩形区域
CWnd* pParentWnd = NULL, // 父窗体指针
LPCTSTR lpszMenuName = NULL, //窗体的菜单
DWORD dwExStyle = 0,//窗体扩展风格
CCreateContext* pContext = NULL);//框架窗体的视图和文档信息,一般填NULL
......
转MessageBox用法(2007-10-19 09:26:00)
摘要:消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合。
1.
MessageBox("这是一个最简单的消息框!");
2.
MessageBox("这是一个有标题的消息框!","标题");
3.
MessageBox("这是一个确定 取消的消息框!","标题", MB_OKCANCEL );
4.
MessageBox("这是一个警告的消息框!","标题", MB_ICONEXCLAMATION );
5.
MessageBox("这是一个两种属性的消息框!","标题", MB_ICONEXCLAMATION|MB_OKCANCEL );
6.
if(MessageBox("一种常用的应用","标题",MB_ICONEXCLAMATION|MB_OKCANCEL)==IDCANCEL)
return;
附其它常用属性
系统默认图标,可在消息框上显示
X错误 MB_ICONHAND, MB_ICONSTOP, and MB_ICONERROR
?询问 MB_ICONQUESTION
!警告 MB_ICONEXCLAMATION and MB_ICONWARNING
i信息 MB_ICONASTERISK and MB_ICONINFORMATION
按钮的形式
MB_OK 默认
MB_OKCANCEL 确定取消
MB_YESNO 是否
MB_YESNOCANCEL 是否取消
返回值
IDCANCEL 取消被选
IDNO 否被选
IDOK 确定被选
IDYES 是被选
补充:
以上消息框的用法是在CWnd的子类中的应用,如果不是,则要MessageBox(NULL,"ddd","ddd",MB_OK); 或MessageBox(hWnd,"ddd","ddd",MB_OK); hWnd为某窗口的句柄,或者直接用AfxMessageBox。
这里所列出的属性只是一些常用属性,在MSDN中还有更多的属性......
转类传递值Dialog & Windows 使用技巧(2007-10-16 11:49:00)
摘要:作者:lixiaosan
日期:04/11/2006
文章不断更新中,请访问这里
注:以下代码以一个名为CTest6Dlg的对话框类为例
1. 在任务栏隐藏对话框 ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);
2. 使对话框为顶层窗口 SetWindowPos(&this->wndTopMost, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
3. 在运行时添加最大化,最小化按钮 SetWindowLong(this->m_hWnd, GWL_STYLE,
GetWindowLong(this->m_hWnd, GWL_STYLE) |
WS_MINIMIZEBOX | WS_MAXIMIZEBOX);
UpdateWindow();
4. 使能对话框右上角关闭按钮
在OnInitDialog中
方法一:
CMenu* menu = GetSystemMenu(FALSE);
menu->ModifyMenu(SC_CLOSE, MF_BYCOMMAND | ......
2005年户籍代码表(2007-10-15 13:33:00)
摘要:http://www.legalinfo.gov.cn/sfks/2005-05/27/content_143083.htm
转的......
转Install Shield安装程序制作图解(2007-10-15 13:22:00)
摘要:
摘要: 本文介绍了利用Install Shield制作应用程序安装软件的方法。在文中作者除了对常用的一些技术进行介绍外,还对安装过程位图的显示、标题和背景的定制等高级技术作了简要的阐述,本文所述方法能够满足大多数安装软件的制作需求。
关键字: 安装软件制作;Install Shield
阅读导航
程序框架的建立
1、建立安装程序工程
2、工作区中的选项卡的功能
3、当前属性的修改
4、脚本代码分析
必要的完善
1、添加程序文件
2、创建快捷方式
3、编写脚本代码
安装程序的发布
1、发布媒介向导对话框
2、Builder Type向导页
3、Tag File向导页
4、Platform向导页
界面设计
1、修改启动画面
2、定制标题
3、定制背景颜色
4、显示位图
前言
InstallShield是一种非常成功的应用软件安装程序制作工具,以其功能强大、灵活性好、容易扩展和强大的网络支持而著称,并因此成为目前最为流行的安装程序专业制作工具之一。该软件不仅提供了灵活方便的向导支持,也允许用户通过其内建的脚本语言InstallScript来对整个安装过程在代码级上进行修改,可以象VC等高级语言一样对安装过程进行精确控制。InstallShield也是Visual C++附带的一个安装程序制作工具,在VC安装结束前将会询问用户是否安装Install Shiled工具,如果当时没有安装,也可以在使用时单独从VC安装盘进行安装。本文将结合一个具体的实例来对InstallShield的使用做一个较为全面的介绍,使读者能够初步掌握使用InstallShield制作专业水准的安装程序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 下一页......
转VC 工具使用和调试方法 (2007-10-15 09:48:00)
摘要:vc++如何实现远程调试
*假设调试机IP 192.168.0.182 远程机IP 192.168.0.161
*远程机为调试机分配权限,使调试机可以使用远程桌面登陆到远程机器上(这样调试起来方便)。
*调试机上安装visual studio .net 2003
共享调试机上的Visual Studio上的远程调试目录(以我的机器为例)
C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Packages\Debugger
*远程机将上面的共享目录考贝到本地,比如:d:\\Debugger
*调试机共享要调试的程序所在目录,比如:D:\important\cvsroot\dv-to-dvd\bin\debug
*远程机将调试机上的目录影射为本地目录。比如:Z:\\
*远程机上以命令行形式执行 D:\\Debugger\msvcmon.exe –tcpip –anyuser
*调试机启动vc. 打开要调试的工程。比如dvtodvd. 选择菜单project->properties
选debuging->remote setting
Connection :Remote via TCP/IP (Native only)
Remote machine: 192.168.0.161
Remote Command: z:\dvtodvd.exe
*debug->start
*就可以调试了。
1.如何在Release状态下进行调试
Project->Setting=>ProjectSetting对话框,选择Release状态。C/C++标签中的Category选General,Optimizations选Disable(Debug),Debut info选Program Database。在Link标签中选中Generate debug info复选框。
注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。
2. Rele......
转解决列表框更新数据的时候的闪烁问题(VC防止窗口及其控件(如CListCtrl(2007-10-09 13:24:00)
摘要:1、将Invalidate()替换为InvalidateRect()。
Invalidate()会导致整个窗口的图象重画,需要的时间比较长,而InvalidateRect()仅仅重画Rect区域内的内容,所以所需时间会少一些。虫虫以前很懒,经常为一小块区域的重画就调用Invalidate(),不愿意自己去计算需要重画的Rect,但是事实是,如果你确实需要改善闪烁的情况,计算一个Rect所用的时间比起重画那些不需要重画的内容所需要的时间要少得多。
2、禁止系统搽除你的窗口。
系统在需要重画窗口的时候会帮你用指定的背景色来搽除窗口。可是,也许需要重画的区域也许非常小。或者,在你重画这些东西之间还要经过大量的计算才能开始。这个时候你可以禁止系统搽掉原来的图象。直到你已经计算好了所有的数据,自己把那些需要搽掉的部分用背景色覆盖掉(如:dc.FillRect(rect,&brush);rect是需要搽除的区域,brush是带背景色的刷子),再画上新的图形。要禁止系统搽除你的窗口,可以重载OnEraseBkgnd()函数,让其直接返回pUE就可以了。如
BOOL CMyWin::OnEraseBkgnd(CDC* pDC)
{
return pUE;
//return CWnd::OnEraseBkgnd(pDC);//把系统原来的这条语句注释掉。
}
3、有效的进行搽除。
搽除背景的时候,不要该搽不该搽的地方都搽。比如,你在一个窗口上放了一个很大的Edit框,几乎占了整个窗口,那么你频繁的搽除整个窗口背景将导致Edit不停重画形成剧烈的闪烁。事实上你可以CRgn创建一个需要搽除的区域,只搽除这一部分。如
GetClientRect(rectClient);
rgn1.CreateRectRgnIndire......
转多线程全(2007-10-09 10:28:00)
摘要:http://blog.csdn.net/cnfangbo/archive/2007/03/28/1544373.aspx......
转VC--获取系统时间 (2007-10-09 10:05:00)
摘要:1.使用CTime类
CString str;
//获取系统时间
CTime tm;
tm=CTime::GetCurrentTime();
str=tm.Format("现在时间是%Y年%m月%d日 %X");
MessageBox(str,NULL,MB_OK);
2: 得到系统时间日期(使用GetLocalTime)
SYSTEMTIME st;
CString strDate,strTime;
GetLocalTime(&st);
strDate.Format("%4d-%2d-%2d",st.wYear,st.wMonth,st.wDay);
strTime.Format("%2d:%2d:%2d",st.wHour,st.wMinute,st.wSecond) ;
AfxMessageBox(strDate);
AfxMessageBox(strTime);
3.使用GetTickCount
//获取程序运行时间
long t1=GetTickCount();//程序段开始前取得系统运行时间(ms)
Sleep(500);
long t2=GetTickCount();();//程序段结束后取得系统运行时间(ms)
str.Format("time:%dms",t2-t1);//前后之差即 程序运行时间
AfxMessageBox(str);
//获取系统运行时间
long t=GetTickCount();
CString str,str1;
str1.Format("系统已运行 %d时",t/3600000);
str=str1;
t%=3600000;
str1.Format("%d分",t/60000);
str+=str1;
t%=60000;
str1.Format("%d秒",t/1000);
str+=str1;
AfxMessageBox(str);
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1607911
......