博文
巧用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
 ......
令人费解的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
//---------------------......
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;
}
......
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......
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都被做到一个.......