博文

转创建有个性的对话框之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函数,直接编写代码控制对话框的背景颜色和......

阅读全文(2727) | 评论:0

转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
......

阅读全文(9230) | 评论:0

转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中还有更多的属性......

阅读全文(9420) | 评论:0

转类传递值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 | ......

阅读全文(3920) | 评论:0

2005年户籍代码表(2007-10-15 13:33:00)

摘要:http://www.legalinfo.gov.cn/sfks/2005-05/27/content_143083.htm 转的......

阅读全文(1688) | 评论:0

转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  下一页......

阅读全文(4323) | 评论:1

转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......

阅读全文(4915) | 评论:0

转解决列表框更新数据的时候的闪烁问题(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......

阅读全文(4854) | 评论:0

转多线程全(2007-10-09 10:28:00)

摘要:http://blog.csdn.net/cnfangbo/archive/2007/03/28/1544373.aspx......

阅读全文(1857) | 评论:0

转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
......

阅读全文(4782) | 评论:3