MFC Windows程序设计--公用控件

综述

控件类型WNDCLASSMFC类
Animation“SysAnimate32”CAnimateCtrlANIMATE_CLASS
ComboBoxEx“ComboBoxEx32”CComboBoxExWC_COMBOBOXEX
Data-Time“SysDateTimePick32”CDataTimeCtrlDATETIMEPICK_CLASS
Header“SysHeader32”CHeaderCtrlWC_HEADER
Hotkey“msctls-hotkey32”CHotkeyCtrlHOTKEY_CLASS
Image ListN/ACImageListN/A
Ip Address“SysIpAddress32”CIpAddressCtrlWC_IPADDRESS
List-View“SysListView32”CListCtrlWC_LISTVIEW
Month Calendar“SysMonthCal32”CMonthCalCtrlMONTHCAL_CLASS
Progress“msctls_Progress32”CProgressCtrlPROGRESS_CLASS
Property SheetN/ACPropertySheetN/A
Rebar“ReBarWindow32”CReBarCtrlREBARCLASSNAME
Rich edit“RichEdit20A” “RichEdit20W”CRichEditCtrlRICHEDIT_CLASS
Slider“msctls_trackbar32”CSliderCtrlTRACKBAR_CLASS
Spin Button“msctls_updown32”CSpinButtonCtrlUPDOWN_CLASS
Status bar“msctls_statusbar32”CStatusBarCtrlSTATUSCLASSNAME
Tab“SysTabControl32”CTabCtrlWC_TABCONTROL
Tool bar“ToolbarWindow32”CToolBarCtrlTOOLBARCLASSNAME
ToolTip“tooltips_class32”CToolTipCtrlTOOLTIPS_CLASS
TreeView“SysTreeView32”CTreeCtrlWC_TREEVIEW
void GetComctlVersion(DWORD &dwMajor, DWORD &dwMinor)
{
    dwMajor = dwMinor = 0;
    HINSTANCE hLib = ::LoadLibrary(_T("Comctl32.dll"));
    if(hLib != NULL)
    {
        DLLGETVERSIONPROC pDllGetVersion = 
            (DLLGETVERSIONPROC)::GetProcAddress(hLib, _T("DllGetVersion"));
        if(pDllGetVersion)
        {
            DLLVERSIONINFO dvi;
            ::ZeroMemory(&dvi, sizeof(dvi));
            dvi.cbSize = sizeof(dvi);
            HRESULT hr = (*pDllGetVersion)(&dvi);
            if(SUCCEEDED(hr))
            {
                dwMajor = dvi.dwMajorVersion;
                dwMinor = dvi.dwMinorVersion;
            }
        }
        else
        {
            dwMajor = 4;
            dwMinor = 0;
        }
        ::FreeLibrary(hLib);
    }

}

创建公用控件

// 1
#include <afxcmn.h>
...
CProgressCtrl wndProgress;
wndProgress.Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(x1, y1, x2, y2), this, IDC_PROGRESS);

// 2
// 对话框RC
CONTROL "", IDC_PROGRESS, PROGRESS_CLASS, WS_BORDER, 32, 32, 80, 16

公用控件公有得一些样式:
CCS_TOP
CCS_BOTTOM
CCS_LEFT
CCS_RIGHT
CCS_VERT
CCS_NOMOVEX 父窗口大小变化时,禁止控件随之调整大小和位置。X方向。
CCS_NOMOVEY 父窗口大小变化时,禁止控件随之调整大小和位置。Y方向。
CCS_NORESIZE 禁止控件随父窗口尺寸变化调整大小
CCS_NOPARENTALIGN
CCS_NODIVIDER 清除工具栏控件顶部得分隔栏
CCS_ADJUSTABLE

SDK风格应用中用公用控件,需调用 ::InitCommonControls/::InitCommonControlsEx加载Comctl32.dll,并注册控件得WNDCLASS。
在应用程序中多次调用::InitCommonControls/::InitCommonControlsEx无不良影响。

处理WM_NOTIFY:
公用控件把通知封装在WM_NOTIFY中。
WM_NOTIFY:
wParam:子窗口ID
lParam:NMHDR*

    typedef struct tagNMHDR
    {
        HWND hwndFrom; // 控件得窗口句柄
        UINT idFrom; // 控件ID
        UINT code; // 通知码
    }NMHDR;

所有通用控件都传送的一些通知:
NM_CLICK
NM_DBLCLK
NM_RCLICK
NM_RDBLCLK
NM_RETURN 控件有焦点时,按下Enter发送。
NM_KILLFOCUS
NM_SETFOCUS
NM_OUTOFMEMORY

大部分公用控件有属于其自身特别的通知码。
例:

// 树形视图展开
TVN_ITEMEXPANDED

lParam:NM_TREEVIEW*
typedef struct _NM_TREEVIEW
{
    NMHDR hdr;
    UINT action;
    TV_ITEM itemOld;
    TV_ITEM itemNew;
    POINT ptDrag;
}NM_TREEVIEW;

// 树形视图获取信息
TVN_GETDISPINFO
lParam:TV_DISPINFO
typedef struct _TV_DISPINFO
{
    NMHDR hdr;
    TV_ITEM item;
}TV_DISPINFO;

封装在WM_NOTIFY消息中的通知通过ON_NOTIFY,ON_NOTIFY_RANGE宏,映射到类的成员函数。
ON_NOTIFY_REFLECT将其反射回控件。

传给ON_NOTIFY处理程序的参数pnmh就是WM_NOTIFY的lParam。参数 pResult传递函数返回值,意义需依靠特定控件特定消息确定。

滑杆控件

样式:
TBS_HORZ 水平放置
TBS_VERT 竖直放置
TBS_LEFT 刻度线画在竖直滑杆左
TBS_RIGHT 刻度线画在竖直滑杆右
TBS_TOP 刻度线画在水平滑杆上
TBS_BOTTOM 刻度线画在水平滑杆下
TBS_BOTH
TBS_NOTICKS 无刻度线
TBS_AUTOTICKS 每个停止位一个刻度线
TBS_FIXEDLENGTH
TBS_NOTHUMB
TBS_ENABLESELRANGE
TBS_TOOLTIPS

SliderCtrl:
SetRange/GetRange
SetPos/GetPos
SetTicFreq //设置刻度线间距离
SetSelection

m_wndSlider.SetRange(0, 8);
m_wndSlider.SetTick(2);
m_wndSlider.SetTick(3);
m_wndSlider.SetTick(6);
m_wndSlider.SetPos(2);

UI自定义:
从CSilderCtrl派生一个类,添加消息处理。改变对按键和鼠标的响应。

移动滑块时,滑杆向其父窗口发WM_HSCROLL,WM_VSCROLL。
滑杆控件的OnHScroll,OnVScroll接收三个参数:
1.通知码
2.滑块位置
3.CScrollBar*

滑杆通知:
TB_TOP 滑杆有输入焦点 + 按下Home
TB_BOTTOM 滑杆有输入焦点 + 按下End
TB_LINEDOWN 滑杆有输入焦点 + 按下向下/右
TB_LINEUP 滑杆有输入焦点 + 按下向上/左
TB_PAGEDOWN 滑杆有输入焦点 + 按下PageDown,单击滑块右/下 单击区间不含滑块。
TB_PAGEUP
TB_THUMBTRACK 鼠标把滑块拖动到新位置
TB_THUMBPOSITION 鼠标拖后,释放
TB_ENDTRACK

CSilderCtrl:
SetPageSize
GetTic
GetTicPos
GetTicArray
GetNumTicks
ClearSel

微调按钮控件

样式:
UDS_HORZ 箭头是水平的。
UDS_WRAP 如前进后退,超过边界值,位置按环式结构确定
UDS_ARROWKEYS 添加键盘接口
UDS_NOTHOUSANDS 消除千位分隔符
UDS_SETBUDDYINT 位置变化时,更新伙伴控件的文本
UDS_AUTOBUDDY 按Z向顺序选以前的控件做微调按钮的伙伴
UDS_ALIGNRIGHT
UDS_ALIGNLEFT

选择按钮控件和它的伙伴控件

// 1
CSpinButtonCtrl::SetBuddy(CWnd*)
// 2
// 创建微调按钮控件时指定UDS_AUTOBUDDY,则微调按钮控件自动按Z向顺序选中以前的控件作为它的伙伴
// RC
EDITTEXT IDC_EDIT, 60, 80, 40, 14, ES_AUTOHSCROLL
CONTROL "", IDC_SPIN, "msctls_updown32", UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ALIGNRIGHT, 0, 0, 0, 0

CSpinButtonCtrl::SetBase // 设置以什么进制来显示数值

微调按钮控件中每单击一次箭头,位置会前进或后退一个。

UDACCEL uda[4];
uda[0].nSec = 0;
uda[0].nInc = 1;
uda[1].nSec = 2;
uda[1].nInc = 2;
uda[2].nSec = 4;
uda[2].nInc = 10;
uda[3].nSec = 8;
uda[3].nInc = 100;
pSpinButton->SetAccel(4, uda);


UINT nCount = pSpinButton->GetAccel(0, NULL);
UDACCEL *puda = new UDACCEL[nCount];
pSpinButton->GetAccel(nCount, puda);
delete[] puda;

位置变化前,微调按钮控件向其父窗口发WM_NOTIFY消息。
通知码:UDN_DELTAPOS
lParam:NM_UPDOWN*
处理程序把*pResult设为FALSE,表允许变化发生。

跟在UDN_DELTAPOS通知后的是WM_HSCROLL或WM_VSCROLL。

工具提示控件

CToolTipCtrl
CToolTipCtrl::Create // 创建一个工具提示控件

m_ctlTT.Create(this);

创立后,下一步是在其中添加工具,
工具可以是另外一个窗口,也可是窗口的一个矩形区域。

一个工具提示控件可连接任意个工具。

m_ctlTT.AddTool(pWnd, _T("This a Window"), NULL, 0);
m_ctlTT.AddTool(pWnd, _T("This a Window"), CRect(32, 32, 64, 64), IDT_RECTANGLE);

MFC的工具提示控件具备子类划分能力。

class CMyToolTipCtrl : public CToolTipCtrl
{
public:
    BOOL AddWindowTool(CWnd* pWnd, LPCTSTR pszText);
    BOOL AddRectTool(CWnd* pWnd, LPCTSTR pszText, LPCRECT pRect, NULL, UINT nIDTool);
};

// cpp
BOOL CMyToolTipCtrl::AddWindowTool(CWnd* pWnd, LPCTSTR pszText)
{
    TOOLINFO ti;
    ti.cbSize = sizeof(TOOLINFO);
    ti.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
    ti.hwnd = pWnd->GetParent()->GetSafeHwnd();
    ti.uId = (UINT)pWnd->GetSafeHwnd();
    ti.hinst = AfxGetInstanceHandle();
    ti.lpszText = (LPTSTR)pszText;

    return (BOOL)SendMessage(TTM_ADDTOOL, 0, (LPARAM)&ti);
}


BOOL CMyToolTipCtrl::AddRectTool(CWnd* pWnd, LPCTSTR lpszText, LPCRECT lpRect, UINT nIDTool)
{
    TOOLINFO ti;
    ti.cbSize = sizeof(TOOLINFO);
    ti.uFlags = TTF_SUBCLASS;
    ti.hwnd = pWnd->GetSafeHwnd();
    ti.uId = nIDTool;
    ti.hInst = AfxGetInstanceHandle();
    ti.lpszText = (LPTSTR)pszText;
    ::CopyRect(&ti.rect, lpRect);
    return (BOOL)SendMessage(TTM_ADDTOOL, 0, (LPARAM)&ti);
}

动态工具提示:
如在调用AddTool,AddWindowTool,AddRectTool时,给工具提示文本指定了 LPSTRTEXTCALLBACK,工具提示控件会在显示工具提示前给其父窗口发一些通知。
WM_NOTIFY
通知码:TTN_NEEDTEXT
lParam:TOOLTIPTEXT*

typedef struct
{
    NMHDR hdr;
    LPTSTR lpszText;
    char szText[80];
    HINSTANCE hinst;
    UINT uFlags;
}TOOLTIPTEXT;

ToolTip控件的父窗口可用三种方式响应TTN_NEEDTEXT通知:
1.把文本字符串的地址复制到TOOLTIPTEXT结构的lpszText中。
2.把文本复制到szText。
3.把字符串资源ID给lpszText。把应用实例句柄给hinst。

ON_NOTIFY(TTN_NEEDTEXT, NULL, OnNeedText)
...
BOOL CMyDialog::OnInitDialog()
{
    m_ctlTT.Create(this);
    m_ctlTT.AddRectTool(this, LPSTR_TEXTCALLBACK, CRect(0, 0, 32, 32), IDT_RECTANGLE);
    return TRUE;
}

void CMyDialog::OnNeedText(NMHDR *pnmh, LRESULT *pResult)
{
    TOOLTIPTEXT *ptt = (TOOLTIPTEXT*)pnmh;
    if(ptt->hdr.idFrom == IDT_RECTANGLE)
    {
        CString string;
        CTime time = CTime::GetCurrentTime();
        string.Format(_T("%.2d:%.2d%.2d"), ...);
        ::lpstrcpy(ptt->szText, (LPCTSTR)string);
    }
}

CToolTipCtrl::
GetText
UpdateTipText
SetDelayTime

图像列表和ComboBoxEx控件

CImageList:
为其它控件提供图像,在位图上制造特殊效果。

MFC用三种方式创建图像列表:
1.先创建空的,再用Add在其中添加图像。
2.用含图像数组的位图创建初始化了的图像列表。
3.合并现有图像列表的图像创建初始化了的。

CImageList il;
il.Create(IDB_BITMAP, 18, 1, CLR_NONE);

CImageList::SetBkColor // 让背景色画不出来。
// 在指定DC上显示il中图片
il.Draw(pDC, 2, point, ILD_NORMAL);

m_il.Create(IDB_IMAGE, 16, 1, RGB(255, 0, 255));
m_wndCBEX.SetImageList(&m_il);
for(int i = 0; i < 5; i++)
{
    CString string;
    string.Format(_T("Item %d"), i);
    COMBOBOXEXITEM cbei;
    cbei.mask = CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_TEXT;
    cbei.iItem = i;
    cbei.pszText = (LPTSTR)(LPCTSTR)string;
    cbei.iImage = 0;
    cbei.iSelectedImage = 0;
    m_wndCBEX.InsertItem(&cbei);
}

cbei.iIndent // 指定项目空格数,用于缩进显示。

COMBOBOXEXITEM:
DeleteItem
GetItem
SetItem

CComboBoxEx : public CComboBox

CComboBoxEx还支持几种扩展样式。需用CComboBoxEx::SetExtendedStyle实现。

CComBoBoxEx发给父窗口的CBN通知和传统组合框一样。
还支持自己特有的通知。
CComboBoxEx通知
CBEN_BEGINEDIT 显示下拉列表/单击编辑控件
CBEN_ENDEDIT 在控件列表里选中或编辑控件的文本
CBEN_DRAGBEGIN 在控件中拖动某项
CBEN_INSERTITEM 某项被插入控件
CBEN_DELETEITEM 某项被删除
CBEN_GETDISPINFO
NM_SETCURSOR

进度/动画

CProgressCtrl

m_wndProgress.SetRange
SetPos
OffsetPos
SetStep
StepIt

CAnimateCtrl
Open
Play
Stop
Close

样式:
ACS_AUTOPLAY
ACS_CENTER
ACS_TRANSPARENT
ACS_TIMER

IP地址

CIpAddressCtrl
SetAddress
GetAddress
ClearAddress
IsBlank

// .h
BYTE m_nField1, m_nField2, m_nField3, m_nField4;

// cpp
BOOL CMyDialog::OnInitDialog()
{
    CDialog::OnInitDialog();
    m_wndIpAddress.SetAddress(m_nField1, m_nField2, m_nField3, m_nField4);
    return TRUE;
}

void CMyDialog::OnOK()
{
    m_wndIpAddress.GetAddress(m_nField1, m_nField2, m_nField3, m_nField4);
    CDialog::OnOK();
}

m_wndIpAddress.SetFieldRange(0, 10, 100);

IP地址控件向其所有者,发四种通知:
WM_COMMAND:
EN_SETFOCUS
EN_KILLFOCUS
EN_CHANGE

WM_NOTIFY:
IDN_FIELDCHANGED

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
此代码是随书光盘拷贝。 此版本是网上最详细的书签版本,也是最清晰的版本。 MFC Windows程序设计(第2版修订版) (Programming Windows with MFC, 2nd Edition) 基本信息 作者: (美)Jeff Prosise [作译者介绍] 译者: 北京博彦科技发展有限责任公司 出版社:清华大学出版社 ISBN:9787302150428 上架时间:2007-5-22 出版日期:2007 年5月 开本:16开 页码:1166 版次:1-1 内容简介   《mfc windows程序设计(第2版)》是对其极为经典的第1版的全面更新,本书不仅扩展了已被认为是权威的关于microsoft用于windows api的功能强大的c++类库的阐述,还新增了有关com、ole和activex的内容。本书的作者,jeff prosise,用其无与伦比的技巧向读者讲述了mfc程序设计中的基本概念和主要技术——再次阐释了在32位windows平台上进行了快速的面向对象开发的完美方法。    本书涵盖了以下专题:    事件驱动程序设计和mpc的基础知识    文档/视图体系结构    位图、调色板和区域    多线程和线程同步    mfc与组件对象模型(com)    activex控件    《mfc windows程序设计(第2版)》见解深刻,并附带有辅助学习的资源——包括在随附的cd-rom中提供了大量代码实例。    要理解如何利用mfc库中提供的成千上万的预编译、预测试的代码的优点,本书——及其作者——将是您独一无二的选择。 作译者 本书提供作译者介绍   Jeff Prosise是一位作者、教员和讲师,他以Windows编程和教授别人如何进行Windows为生。作为一位在Windows程序设计MFC和COM领域世界知名的权威,他还是《PC Magazinge》和《Microsoft Systems Journal》杂志的组稿编辑。 目录 鸣谢 序言 第ⅰ部分 windowsmfc基础  第1章 hello,mfc  第2章 在窗口中绘图  第3章 鼠标和键盘  第4章 菜单  第5章 mfc集合数  第6章 文件i/o和串行化  第7章 控件  第8章 对话框和属性表 第ⅱ部分 文档/视图体系结构  第9章 文档、视图和单文档界面  第10章 滚动视图、html视图以及其他视图类型  第11章 多文档和多视图  第12章 工具栏、状态栏和组合栏  第13章 打印和打印预览 第ⅲ部分 高级篇  第14章 计时器和空闲处理  第15章 位图、调色板以及区域 . 第16章 公用控件  第17章 线程和线程同步化 第ⅳ部分 com,ole和activex  第18章 mfc和组件对象模型  第19章 剪贴板和ole拖放  第20章 automation  第21章 activex控件 序言   像我的许多同行一样,我学习Windows编程是从读Petzold的书《Windows程序设计》——一本所有Windows程序员都使用Windows编程圣经——开始的。在刚刚成为一名MFC程序员时,那天我冲进书店,想买一本能够与ProgrammingWindows相媲美的MFC编程书籍,但是却没有结果。于是我决定自己写一本这样的书。它正是您手中所拿到的这本书,也正是当初我在初学MFC时,希望拥有的那本书。.   正如您所知,MFC是用于Windows编程的Microsoft C++类库。本书并不是一本关于C++的书,而是一本关于使用MFC而不是Windows APl,进行32位Windows应用程序编程,以访问操作系统的基本特性和服务的书。它原本为以下两种编程人员所写:   曰打算学习MFCWindowsAPl程序员   曰未进行过Windows编程的程序员   无论您属于哪种人,我假设您已经了解C++,而且熟悉C++语法,如派生类及虚函数。如果是这样的话,您已在征肠MFC编程之山的历险中迈出了坚实的第一步。   即使是有经验的Windo;。程序员在初读MFC代码时也会感到迷惑。一部分是由于VisualC++代码生成向导所生成的代码所致,另一个原因是因为无数行代码隐藏在MFC类库中。这正是本书使用特殊的方法来写MFC的缘由。本书从让您亲自手写代码开始(不用向导),使用MFCl.0的应用程序结构风格,也就是说,既不用文档也不用视图。只有在您掌:握了上述的基础知识,初步认识了简单的MFC类库如CWnd和CWinApp之后,我才开始介;绍向导并教您使用MFC的文档视图结构的方法。您将逐渐理解Windows的关键组件及它的消息驱动机制,如图形设备接口(GDl)。我相信用这种方法可以使MFC的学习变得生动有趣而不是令人气馁。我认为一旦您认真地学完这本书,然后再站在老练的Windows程序员的角度来回顾学习过程中的甜酸苦辣,您将同意我的观点。   本书分为4个部分。第1部分,介绍了WindowsMFC编程的主要原则,以一个示例程序"Hello,MFC"开始,然后逐一简要讲解菜单、控件、对话框以及其他用于组建应用程序的模块。第2部分,在第1部分的基础之上,对文档视图结构做详细讲解,特别是第9、10、11章,揭示了实现文档视图的神奇之处,不仅介绍了如何编写简单的文档视图程序,而且教您一些高级功能,如打印预览和拆分窗口视图。第3部分涵盖了一些WindowsMFC的更鬲级的功能,如颜色选项板、位图句柄及多线程程序。在第4部分,您将了解到MFC如何包容COM、OLE和ActiveX,如何编写支持COM的组件及应用程序。在读完第21章之后,您将更加精通使用MFC进行Windows 32位编程的技术。您也将拥有丰富的源代码用于您的第一   第2版的新特点   读过本书第1版的朋友将会注意到第2版的两个相当明显的变化。首先,本版包括7个新章节,1章用于讲解MFC视图类,1章涵盖MFC集合类;1章介绍MFC文件I/0和串行化机制,4章讨论了MFC和COM的关系。MFC不是类似活动模板库(ATL)的通用COM框架,但是MFC使编写某些COM程序更容易,使编写ActiveX控件的过程更简单,而且它使编写自动化(Automation)服务器程序(使用COM技术来供脚本客户调用的程序)变成了二件轻而易举的事。..   第2版的主要变化是关于向导的知识。在第1版中并没有提到向导。在第2版中1-3章使用手写的示例程序,但到了第4章就使用AppWizard和ClassWizard来生成代码。这样做的原因是,我始终认为代码生成向导会影响MFC的学习,它只应由老练的程序员来使用。但我也逐渐认识到,实际上,有很多MFC程序员在使用MFC向导来做某些工作,如编写ActiveX控件,在此时不用向导是很不明智的。经过深思熟虑之后,我决定加上这些内容。   尽管这些新内容是关于向导的使用,然而它现在不是,以后也不会是一本仅仅介绍如何在向导中单击按钮的书。在介绍了一个像如何用ClassWizard编写消息句柄之类的基本技巧之后,我在给出代码时,将不再赘述这些内容。当然,。向导永远不能超越您的能力去做任何事,因此键人所有手写的代码是完全可行的。   在讲述MFC编程的书中使用向导的缺点是,向导生成的程序不适合发表。本书的第一版印刷了每个程序文件的代码。本版书没有这样做,而只是包括了“相关”的源代码文件,其他的都放在CD-ROM中,为什么?因为印刷这些代码会使本书增加一倍的厚度而没有相应增加内涵。其中一些代码是由Visual C++6.0的MFC向导产生的,甚至没有被编译(详细内容请参见第4章)。我并不为本书中向导生成的代码而得意,因为其中充斥着随意生成的空行、不连贯的注释和无用的函数。对那些以编写清晰易读的示例源代码为骄傲的作者来说,向导生成的东西是一剂苦药。   然而,向导代表了Windows编程的新法则,它们是你、我及所有人都必须习惯的重要事物。但令人遗憾的是,VisualC++开发小组没有给我们一个真正的向导,而只是一个冒充向导的玩具。在他们能够做到以前,我们得习惯现有的向导。   CD.ROM中的内容   本书随附的CD-ROM包括书中全部示例程序的源代码,它们都在Visual C十十6.0和MFC 6.0环境下编写、编译而成,并在Win32平台上测试通过。如果没有特别说明它们都与Windows 98、WindowsNT4.0及Windows 2000兼容,其中大部分也与Windows 95及WindowsNT 3.51兼容。   您可用CD—ROM的根目录下的安装程序来将CD-ROM中,的内容复制到硬盘里,也可只复制其中\Code目录中的代码。我们在此目录中为书中每章各建了一个子目录——Chap01、Chap02,依次类推。在这些子目录中存放示例程序。每个程序的源代码文件都有一个相应的发布版本的EXE文件,以及您可使用Visual C++的Open Workspace命令来打开的workspace(DSW)文件。   JeffProsise   1999年3月12日...   
此版本是网上最详细的书签版本,也是最清晰的版本。 MFC Windows程序设计(第2版修订版) (Programming Windows with MFC, 2nd Edition) 基本信息 作者: (美)Jeff Prosise [作译者介绍] 译者: 北京博彦科技发展有限责任公司 出版社:清华大学出版社 ISBN:9787302150428 上架时间:2007-5-22 出版日期:2007 年5月 开本:16开 页码:1166 版次:1-1 内容简介   《mfc windows程序设计(第2版)》是对其极为经典的第1版的全面更新,本书不仅扩展了已被认为是权威的关于microsoft用于windows api的功能强大的c++类库的阐述,还新增了有关com、ole和activex的内容。本书的作者,jeff prosise,用其无与伦比的技巧向读者讲述了mfc程序设计中的基本概念和主要技术——再次阐释了在32位windows平台上进行了快速的面向对象开发的完美方法。    本书涵盖了以下专题:    事件驱动程序设计和mpc的基础知识    文档/视图体系结构    位图、调色板和区域    多线程和线程同步    mfc与组件对象模型(com)    activex控件    《mfc windows程序设计(第2版)》见解深刻,并附带有辅助学习的资源——包括在随附的cd-rom中提供了大量代码实例。    要理解如何利用mfc库中提供的成千上万的预编译、预测试的代码的优点,本书——及其作者——将是您独一无二的选择。 作译者 本书提供作译者介绍   Jeff Prosise是一位作者、教员和讲师,他以Windows编程和教授别人如何进行Windows为生。作为一位在Windows程序设计MFC和COM领域世界知名的权威,他还是《PC Magazinge》和《Microsoft Systems Journal》杂志的组稿编辑。 目录 鸣谢 序言 第ⅰ部分 windowsmfc基础  第1章 hello,mfc  第2章 在窗口中绘图  第3章 鼠标和键盘  第4章 菜单  第5章 mfc集合数  第6章 文件i/o和串行化  第7章 控件  第8章 对话框和属性表 第ⅱ部分 文档/视图体系结构  第9章 文档、视图和单文档界面  第10章 滚动视图、html视图以及其他视图类型  第11章 多文档和多视图  第12章 工具栏、状态栏和组合栏  第13章 打印和打印预览 第ⅲ部分 高级篇  第14章 计时器和空闲处理  第15章 位图、调色板以及区域 . 第16章 公用控件  第17章 线程和线程同步化 第ⅳ部分 com,ole和activex  第18章 mfc和组件对象模型  第19章 剪贴板和ole拖放  第20章 automation  第21章 activex控件 序言   像我的许多同行一样,我学习Windows编程是从读Petzold的书《Windows程序设计》——一本所有Windows程序员都使用Windows编程圣经——开始的。在刚刚成为一名MFC程序员时,那天我冲进书店,想买一本能够与ProgrammingWindows相媲美的MFC编程书籍,但是却没有结果。于是我决定自己写一本这样的书。它正是您手中所拿到的这本书,也正是当初我在初学MFC时,希望拥有的那本书。.   正如您所知,MFC是用于Windows编程的Microsoft C++类库。本书并不是一本关于C++的书,而是一本关于使用MFC而不是Windows APl,进行32位Windows应用程序编程,以访问操作系统的基本特性和服务的书。它原本为以下两种编程人员所写:   曰打算学习MFCWindowsAPl程序员   曰未进行过Windows编程的程序员   无论您属于哪种人,我假设您已经了解C++,而且熟悉C++语法,如派生类及虚函数。如果是这样的话,您已在征肠MFC编程之山的历险中迈出了坚实的第一步。   即使是有经验的Windo;。程序员在初读MFC代码时也会感到迷惑。一部分是由于VisualC++代码生成向导所生成的代码所致,另一个原因是因为无数行代码隐藏在MFC类库中。这正是本书使用特殊的方法来写MFC的缘由。本书从让您亲自手写代码开始(不用向导),使用MFCl.0的应用程序结构风格,也就是说,既不用文档也不用视图。只有在您掌:握了上述的基础知识,初步认识了简单的MFC类库如CWnd和CWinApp之后,我才开始介;绍向导并教您使用MFC的文档视图结构的方法。您将逐渐理解Windows的关键组件及它的消息驱动机制,如图形设备接口(GDl)。我相信用这种方法可以使MFC的学习变得生动有趣而不是
### 回答1: "MFC Windows程序设计"是一本非常经典的MFC(Microsoft Foundation Classes)框架的Windows程序设计教材,提供了一套完整的学习和实践的指导。在这本书中,读者可以学习到关于MFC框架的重要概念和基础知识,以及如何利用MFC进行Windows应用程序的开发。 这本书的PDF版本带有书签功能,这是一项非常实用和方便的功能。书签功能可以帮助读者快速定位到所需的章节、节或特定的内容。当读者打开这本书的PDF时,可以通过点击书签列表中的各个项,快速跳转到相应的位置。 这本书的书签功能的应用范围非常广泛。对于初学者而言,可以通过书签直接跳转到所感兴趣的概念、代码示例或问题解答。对于具有一定经验的开发者来说,书签功能可以帮助他们快速检索和回顾需要的知识点,提高开发效率。 除了方便的定位功能之外,这本书的PDF版本还提供了一些其他的特点。比如,书签可以根据读者的需要自定义,并且可以添加和删除书签项。此外,书签的显示方式也可以调整,比如可以以树形结构或平铺视图的方式显示书签列表。 总的来说,带有书签的"MFC Windows程序设计" PDF版本是一份非常方便的学习和参考资料,它通过书签功能提供了便捷的导航和获取所需信息的途径,使得读者能够更加高效地学习和应用MFC框架进行Windows程序开发。 ### 回答2: MFC(Microsoft Foundation Classes)是一种Microsoft Windows平台上的编程框架,用于开发图形用户界面(GUI)应用程序。MFC提供了一系列的类和函数,以及许多常用的控件,使得开发者能够更容易地创建Windows操作系统上的应用程序。 MFC Windows程序设计PDF带书签的意思是,希望找到一本关于MFC Windows程序设计的电子书,并且该电子书拥有书签功能。 对于这个需求,可以在互联网上搜索MFC Windows程序设计的相关电子书。一些常见的电子书网站,如豆瓣读书、知网、百度文库等,往往会提供PDF格式的电子书下载服务。用户可以根据关键词搜索“MFC Windows程序设计PDF”,然后在搜索结果中查找带有书签功能的电子书。 选择电子书时,可以根据自己的需要和水平选择合适的难度和内容的图书。一些经典的MFC Windows程序设计书籍,如《MFC窗口程序设计经典实例》、《MFC程序设计实例解析与经典源码》等,不仅介绍了MFC的基本概念和使用方法,还提供了实例代码供读者参考和学习。 一旦找到合适的电子书,可以下载到本地计算机的硬盘上,并使用支持书签功能的PDF阅读器打开。在阅读器中,用户可以利用书签功能,将自己常用或感兴趣的章节添加为书签,以便于日后查找和阅读。 总之,要找到一本MFC Windows程序设计的PDF电子书,并使其带有书签功能,用户可以在网上搜索并选择一本合适的电子书,然后下载到本地并使用支持书签功能的PDF阅读器进行阅读。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

raindayinrain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值