博文

巧用VC工程下的rc文件(续)(2009-01-13 17:24:00)

摘要:  又快下班了,趁这会有点时间,赶紧写一点。接着上一次的关于资源文件(rc文件)继续说,这里主要说两个内容。 一 利用rc文件进行界面的布局    打开一个资源文件,如FHRDemo.rc,右键选择查看代码,可以看到文本描述的资源文件,这里截取其中的一段。 // Dialog
// IDD_ABOUTBOX DIALOGEX 0, 0, 235, 55
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About FHRDemo"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    ICON            IDR_MAINFRAME,IDC_STATIC,11,17,20,20
    LTEXT           "FHRDemo Version 2.0",IDC_STATIC,40,10,119,8,SS_NOPREFIX
    LTEXT           "Copyright (C) 2007",IDC_STATIC,40,25,119,8
    DEFPUSHBUTTON   "OK",IDOK,178,7,50,16,WS_GROUP
END IDD_FHRDEMO_FORM DIALOGEX 0, 0, 286, 211
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
  ......

阅读全文(10077) | 评论:2

令人费解的MFC客户区(2008-11-11 14:39:00)

摘要:    估计很多人都会遇到这么一个问题,平时我们用单文档/视图结构时,很容易就在客户区画个图,画根线什么的,然而,要在对话框的某个控件中画这些东西,刚一上来,还真有点搞吧。     下面,我就把在对话框中对某个控件画图的程序先列出来,然后再看看微软的一些搞的地方。 初始化: m_IsDrawing=false;
 CWnd*pCanvas=GetDlgItem(IDC_CANVAS);
 pCanvas->GetWindowRect(&m_Canvas);
 ScreenToClient(&m_Canvas); void CPaintORamaDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
 // TODO: Add your message handler code here and/or call default
 /////////////////////////////////////////
 //Add code
 //---------------------------------------
 if(m_Canvas.PtInRect(point))
 {
  m_IsDrawing=true;
  m_LineStart=point;
  SetCapture();  }
} void CPaintORamaDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
 // TODO: Add your message handler code here and/or call default
 //////////////////////////////////////////////
 //Add Code
 //---------------------......

阅读全文(10627) | 评论:4

MFC工具栏介绍(续)(2008-10-10 17:31:00)

摘要: 步骤1:添加一个CDialogBar派生类 在资源中添加一个对话框,再采用类向导来添加类,找不到CDialogBar作为基类吧,可以先用CDialog作为基类产生一个,然后把所以的“CDialog”替换为“CDialogBar”,替换完成了。编译一下,^_^有错误吧!!请看步骤2。 步骤2:解决编译错误并完善该类 其实错误就是构着函数调用基类时有问题,: CDialogBar(/*CDlgBar::IDD, pParent*/)象这样注释掉就可以了,添加一个类似OnInitDialog的函数,在CDialogBar中是不存在OnInitDialog的消息的,至少我还不知道,因为初始化是在创建后调用的所以我们就重写virtual BOOL Create(CWnd* pParentWnd,UINT nIDTemplate,UINT nStyle,UINT nID);这个函数。注意哦用向导添加的Create函数的参数是不对的喔,看上面。下面是实现代码(很简单的) BOOL CDlgXXX::Create(CWnd* pParentWnd,UINT nIDTemplate,UINT nStyle,UINT nID) { // TODO: Add your specialized code here and/or call the base class BOOL bRes= CDialogBar::Create(pParentWnd,nIDTemplate,nStyle,nID ); InitDialogBar();//在类中添加一个成员函数就可以了 return bRes; } BOOL CDlgXXX::InitDialogBar() { UpdateData(FALSE);//这个一定要啊,这样就会有和CDialog一样的数据交换效果了 return TRUE; } 步骤3:创建和使用 if (!m_barAttrib.Create(this,IDD_DLG_COM_ATTRIB, CBRS_RIGHT|CBRS_GRIPPER, XXX)) { TRACE0("Failed to create dialogbar\n"); return -1; } ......

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

MFC关于工具栏介绍(2008-10-10 17:14:00)

摘要:    一个好的软件,界面非常重要,其中的功能要让客户一目了然。而这些可以借助于工具栏,如在Microsoft Word中的工具栏,相关的操作基本上都可以借助工具栏来完成。下面,我就将我知道的关于VC中关于工具栏的一些东西写写,与大家共享,不对的地方请大家帮忙纠正。     下面我以Visual Studio.net 2003下的单文档/视图的程序为例说明。     在VS中,实现工具栏的类是CToolBar, 在新建一个单文档/视图程序的时候,在框架类的OnCreate中,系统会自动创建一个工具条。如下:  if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
 {
  TRACE0("未能创建工具栏\n");
  return -1;      // 未能创建
 } 方法一: 想要修改或者增加工具栏中的内容,一种方法是进入“资源视图”,然后选择"ToolBar",然后对工具栏中的内容进行修改或者添加,并为它们添加响应消息。这是最简单,有时候也是最直接有效的方法。 方法二: 如果你想创建一个更加符合自己要求的工具条,而不想被资源视图中的ToolBar所限制的话,那么你可以自己写程序来Create ToolBar. 这样的话,你只需要将上面工程自动生成的那段代码注释掉,然后自己写一个函数,这里取名为CreateExToolBar(); 然后用这个函数代替上面这段代码。 然后加入自己特色的工具条代码,当然,先还是要创建一个工具条,如下:  if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CH......

阅读全文(8889) | 评论:2

VC程序在没装VC的机器中运行(2008-06-26 16:01:00)

摘要:由于工作需要,经常需要演示。我们是一个专门搞研究开发的公司,主要是利用C和C++做开发。一些研究成果需要经常演示给总部的人看。演示的时候一般都是带一台笔记本去,而这笔记本一般是没有装过VC,也没有装VS.net的,而在演示的时候,我们有些程序是用VC6.0,有些程序是VS.NET2003, 有些程序还是用VS.net 2005做的。这里就总结一下用C和C++开发的程序如何在没有装VC的机器里运行。 一 VC 6.0和VS.NET 2003的程序 对于VC 6.0和VS.NET 2003编写的程序,需要调用的DLL主要有三个,对于VC6.0来说,只要将以下三个DLL拷到exe文件同目录下,则exe则可以在没装VC6.0的机器中运行. MFC42D.DLL MFCO42D.DLL MSVCRTD.DLL 这是对Debug程序,对一般程序,应该是 MFC42.DLL MFCO42.DLL MSVCRT.DLL 对于用VS.NET 2003编写的程序,也分Debug和一般的 分别是: Debug: mfc71d.dll          msvcp71d.dll            msvcr71d.dll 一般: mfc71.dll             msvcp71.dll              msvcr71.dll 只要将这三个DLL加入到工程的目录中,在没装VS.NET 2003的机器中也能运行EXE文件。   二  VS.NET 2005写的程序 对于VS.NET 2005写的程序,和前面两种情况有点区别。这是因为VS.NET 2005下处理DLL的方式和前面的两种方式不一样。大致原因是,在VS.NET 2005下,像前面两种情况下的DLL都被做到一个.......

阅读全文(5029) | 评论:2