派生的mfc ActiveX控件如何更改背景、字体等属性?

qq_38687221 2017-11-15 08:15:39
如题,使用MFC ActiveX控件向导生成一个继承CEdit类的编辑控件,那么生成这个工程之后,接下来该怎么向里面添加属性,得到自己想要的东西呢。比如我想改变这个编辑控件的外形、背景色、字体等,我该怎么做呢?之前生成Activex控件工程的时候,想做这些在添加属性完之后可以OnDraw函数里面绘制,但继承的子类控件在OnDraw函数里面只有一句DoSupperClassPaint()函数,不知道怎么下手,希望有经验的朋友指点下。
...全文
443 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_38687221 2017-11-27
  • 打赏
  • 举报
回复
引用 11 楼 zjq9931 的回复:
[quote=引用 9 楼 qq_38687221 的回复:] [quote=引用 5 楼 zjq9931 的回复:] https://www.cnblogs.com/staring-hxs/archive/2013/01/09/2853126.html 看看这个对你有没有用
里面有些想法下午我已经试过了,依旧不行,在工程中重载OnCtlColor()函数,经设断点,发现程序执行完之后都没有进到这个函数里面,后来,我还是使用sendmessage()函数发送了一个WM_CTLCOLOREDIT消息才进到那个函数,但执行完里面的语句后也没有任何反应,不知道是什么原因。[/quote] 重载onpaint函数呢?[/quote] 没有用!
  • 打赏
  • 举报
回复
引用 9 楼 qq_38687221 的回复:
[quote=引用 5 楼 zjq9931 的回复:] https://www.cnblogs.com/staring-hxs/archive/2013/01/09/2853126.html 看看这个对你有没有用
里面有些想法下午我已经试过了,依旧不行,在工程中重载OnCtlColor()函数,经设断点,发现程序执行完之后都没有进到这个函数里面,后来,我还是使用sendmessage()函数发送了一个WM_CTLCOLOREDIT消息才进到那个函数,但执行完里面的语句后也没有任何反应,不知道是什么原因。[/quote] 重载onpaint函数呢?
赵4老师 2017-11-16
  • 打赏
  • 举报
回复
注释掉DoSupperClassPaint(),全部改为自绘?
qq_38687221 2017-11-16
  • 打赏
  • 举报
回复
引用 6 楼 zgl7903 的回复:
那我建议你使用 RichEdit 控件, 比较容易操作, MSDN 上类似于编辑框功能的参考代码

/*
Displaying Keyboard Input
The example in this section shows how an application can receive characters from the keyboard, display them in the client area of a window, and update the position of the caret with each character typed. It also demonstrates how to move the caret in response to the left arrow, right arrow, home and end keystrokes, and shows how to highlight selected text in response to the shift+right arrow key combination. 

During processing of the WM_CREATE message, the window procedure shown in the example allocates a 64K buffer for storing keyboard input. It also retrieves the metrics of the currently loaded font, saving the height and average width of characters in the font. The height and width are used in processing the WM_SIZE message to calculate the line length and maximum number of lines, based on the size of the client area. 

The window procedure creates and displays the caret when processing the WM_SETFOCUS message. It hides and deletes the caret when processing the WM_KILLFOCUS message. 

When processing the WM_CHAR message, the window procedure displays characters, stores them in the input buffer, and updates the caret position. The window procedure also converts tab characters to four consecutive space characters. Backspace, linefeed, and escape characters generate a beep, but are not otherwise processed. 

The window procedure performs the left, right, end, and home caret movements when processing the WM_KEYDOWN message. While processing the action of the right arrow key, the window procedure checks the state of the shift key and, if it is down, selects the character to the right of the caret as the caret is moved. 

Note that the following code is written so that it can be compiled either as Unicode or as ANSI. If the source code defines UNICODE, strings are handled as Unicode characters; otherwise, they are handled as ANSI characters. 
*/
感谢提供编辑框编程的一些信息,如果实在找不到方法从派生的控件中设置自己想要的属性,那估计就真得自己完完整整做一个编辑框控件了,但这个难度是非常大的,键盘、鼠标的消息全都要自己处理。再顶顶,看看还有没有回复。
qq_38687221 2017-11-16
  • 打赏
  • 举报
回复
引用 5 楼 zjq9931 的回复:
https://www.cnblogs.com/staring-hxs/archive/2013/01/09/2853126.html 看看这个对你有没有用
里面有些想法下午我已经试过了,依旧不行,在工程中重载OnCtlColor()函数,经设断点,发现程序执行完之后都没有进到这个函数里面,后来,我还是使用sendmessage()函数发送了一个WM_CTLCOLOREDIT消息才进到那个函数,但执行完里面的语句后也没有任何反应,不知道是什么原因。
zgl7903 2017-11-16
  • 打赏
  • 举报
回复


        case WM_KEYDOWN: 
            switch (wParam) 
            { 
                case VK_LEFT:   // LEFT ARROW 
 
                    // The caret can move only to the beginning of 
                    // the current line. 
 
                    if (nCaretPosX > 0) 
                    { 
                        HideCaret(hwndMain); 
 
                        // Retrieve the character to the left of 
                        // the caret, calculate the character's 
                        // width, then subtract the width from the 
                        // current horizontal position of the caret 
                        // to obtain the new position. 
 
                        ch = pchInputBuf[--nCurChar]; 
                        hdc = GetDC(hwndMain); 
                        GetCharWidth32(hdc, ch, ch, &nCharWidth); 
                        ReleaseDC(hwndMain, hdc); 
                        nCaretPosX = max(nCaretPosX - nCharWidth, 
                            0); 
                        ShowCaret(hwndMain); 
                    } 
                    break; 
 
                case VK_RIGHT:  // RIGHT ARROW 
 
                    // Caret moves to the right or, when a carriage 
                    // return is encountered, to the beginning of 
                    // the next line. 
 
                    if (nCurChar < cch) 
                    { 
                        HideCaret(hwndMain); 
 
                        // Retrieve the character to the right of 
                        // the caret. If it's a carriage return, 
                        // position the caret at the beginning of 
                        // the next line. 
 
                        ch = pchInputBuf[nCurChar]; 
                        if (ch == 0x0D) 
                        { 
                            nCaretPosX = 0; 
                            nCaretPosY++; 
                        } 
 
                        // If the character isn't a carriage 
                        // return, check to see whether the SHIFT 
                        // key is down. If it is, invert the text 
                        // colors and output the character. 
 
                        else 
                        { 
                            hdc = GetDC(hwndMain); 
                            nVirtKey = GetKeyState(VK_SHIFT); 
                            if (nVirtKey & SHIFTED) 
                            { 
                                crPrevText = SetTextColor(hdc, 
                                    RGB(255, 255, 255)); 
                                crPrevBk = SetBkColor(hdc, 
                                    RGB(0,0,0)); 
                                TextOut(hdc, nCaretPosX, 
                                    nCaretPosY * dwCharY, 
                                    &ch, 1); 
                                SetTextColor(hdc, crPrevText); 
                                SetBkColor(hdc, crPrevBk); 
                            } 
 
                            // Get the width of the character and 
                            // calculate the new horizontal 
                            // position of the caret. 
 
                            GetCharWidth32(hdc, ch, ch, &nCharWidth); 
                            ReleaseDC(hwndMain, hdc); 
                            nCaretPosX = nCaretPosX + nCharWidth; 
                        } 
                        nCurChar++; 
                        ShowCaret(hwndMain); 
                        break; 
                    } 
                    break; 
 
                case VK_UP:     // UP ARROW 
                case VK_DOWN:   // DOWN ARROW 
                    MessageBeep(0xFFFFFFFF); 
                    return 0; 
 
                case VK_HOME:   // HOME 
 
                    // Set the caret's position to the upper left 
                    // corner of the client area. 
 
                    nCaretPosX = nCaretPosY = 0; 
                    nCurChar = 0; 
                    break; 
 
                case VK_END:    // END  
 
                    // Move the caret to the end of the text. 
 
                    for (i=0; i < cch; i++) 
                    { 
                        // Count the carriage returns and save the 
                        // index of the last one. 
 
                        if (pchInputBuf[i] == 0x0D) 
                        { 
                            cCR++; 
                            nCRIndex = i + 1; 
                        } 
                    } 
                    nCaretPosY = cCR; 
 
                    // Copy all text between the last carriage 
                    // return and the end of the keyboard input 
                    // buffer to a temporary buffer. 
 
                    for (i = nCRIndex, j = 0; i < cch; i++, j++) 
                        szBuf[j] = pchInputBuf[i]; 
                    szBuf[j] = TEXT('\0'); 
 
                    // Retrieve the text extent and use it 
                    // to set the horizontal position of the 
                    // caret. 
 
                    hdc = GetDC(hwndMain); 
                    GetTextExtentPoint32(hdc, szBuf, lstrlen(szBuf), 
                        &sz); 
                    nCaretPosX = sz.cx; 
                    ReleaseDC(hwndMain, hdc); 
                    nCurChar = cch; 
                    break; 
 
                default: 
                    break; 
            } 
            SetCaretPos(nCaretPosX, nCaretPosY * dwCharY); 
            break; 
 
        case WM_PAINT: 
            if (cch == 0)       // nothing in input buffer 
                break; 
 
            hdc = BeginPaint(hwndMain, &ps); 
            HideCaret(hwndMain); 
 
            // Set the clipping rectangle, and then draw the text 
            // into it. 
 
            SetRect(&rc, 0, 0, dwLineLen, dwClientY); 
            DrawText(hdc, pchInputBuf, -1, &rc, DT_LEFT); 
 
            ShowCaret(hwndMain); 
            EndPaint(hwndMain, &ps); 
            break; 
        
        // Process other messages. 
        
        case WM_DESTROY: 
            PostQuitMessage(0); 
 
            // Free the input buffer. 
 
            GlobalFree((HGLOBAL) pchInputBuf); 
            UnregisterHotKey(hwndMain, 0xAAAA); 
            break; 
 
        default: 
            return DefWindowProc(hwndMain, uMsg, wParam, lParam); 
    } 
    return NULL; 
} 
zgl7903 2017-11-16
  • 打赏
  • 举报
回复
接上文

#define BUFSIZE 65535 
#define SHIFTED 0x8000 
 
LONG APIENTRY MainWndProc(HWND hwndMain, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    HDC hdc;                   // handle to device context 
    TEXTMETRIC tm;             // structure for text metrics 
    static DWORD dwCharX;      // average width of characters 
    static DWORD dwCharY;      // height of characters 
    static DWORD dwClientX;    // width of client area 
    static DWORD dwClientY;    // height of client area 
    static DWORD dwLineLen;    // line length 
    static DWORD dwLines;      // text lines in client area 
    static int nCaretPosX = 0; // horizontal position of caret 
    static int nCaretPosY = 0; // vertical position of caret 
    static int nCharWidth = 0; // width of a character 
    static int cch = 0;        // characters in buffer 
    static int nCurChar = 0;   // index of current character 
    static PTCHAR pchInputBuf; // address of input buffer 
    int i, j;                  // loop counters 
    int cCR = 0;               // count of carriage returns 
    int nCRIndex = 0;          // index of last carriage return 
    int nVirtKey;              // virtual-key code 
    TCHAR szBuf[128];          // temporary buffer 
    TCHAR ch;                  // current character 
    PAINTSTRUCT ps;            // required by BeginPaint 
    RECT rc;                   // output rectangle for DrawText 
    SIZE sz;                   // string dimensions 
    COLORREF crPrevText;       // previous text color 
    COLORREF crPrevBk;         // previous background color 
 
    switch (uMsg) 
    { 
        case WM_CREATE: 
 
            // Get the metrics of the current font. 
 
            hdc = GetDC(hwndMain); 
            GetTextMetrics(hdc, &tm); 
            ReleaseDC(hwndMain, hdc); 
 
            // Save the average character width and height. 
 
            dwCharX = tm.tmAveCharWidth; 
            dwCharY = tm.tmHeight; 
 
            // Allocate a buffer to store keyboard input. 
 
            pchInputBuf = (LPTSTR) GlobalAlloc(GPTR, 
                BUFSIZE * sizeof(TCHAR)); 
            return 0; 
 
        case WM_SIZE: 
 
            // Save the new width and height of the client area. 
 
            dwClientX = LOWORD(lParam); 
            dwClientY = HIWORD(lParam); 
 
            // Calculate the maximum width of a line and the 
            // maximum number of lines in the client area. 
            
            dwLineLen = dwClientX - dwCharX; 
            dwLines = dwClientY / dwCharY; 
            break; 
 
 
        case WM_SETFOCUS: 
 
            // Create, position, and display the caret when the 
            // window receives the keyboard focus. 
 
            CreateCaret(hwndMain, (HBITMAP) 1, 0, dwCharY); 
            SetCaretPos(nCaretPosX, nCaretPosY * dwCharY); 
            ShowCaret(hwndMain); 
            break; 
 
        case WM_KILLFOCUS: 
 
            // Hide and destroy the caret when the window loses the 
            // keyboard focus. 
 
            HideCaret(hwndMain); 
            DestroyCaret(); 
            break; 
 
        case WM_CHAR: 
            switch (wParam) 
            { 
                case 0x08:  // backspace 
                case 0x0A:  // linefeed 
                case 0x1B:  // escape 
                    MessageBeep(0xFFFFFFFF); 
                    return 0; 
 
                case 0x09:  // tab 
 
                    // Convert tabs to four consecutive spaces. 
 
                    for (i = 0; i < 4; i++) 
                        SendMessage(hwndMain, WM_CHAR, 0x20, 0); 
                    return 0; 
 
                case 0x0D:  // carriage return 
 
                    // Record the carriage return and position the 
                    // caret at the beginning of the new line. 
 
                    pchInputBuf[cch++] = 0x0D; 
                    nCaretPosX = 0; 
                    nCaretPosY += 1; 
                    break; 
 
                default:    // displayable character 
 
                    ch = (TCHAR) wParam; 
                    HideCaret(hwndMain); 
 
                    // Retrieve the character's width and output 
                    // the character. 
 
                    hdc = GetDC(hwndMain); 
                    GetCharWidth32(hdc, (UINT) wParam, (UINT) wParam, 
                        &nCharWidth); 
                    TextOut(hdc, nCaretPosX, nCaretPosY * dwCharY, 
                        &ch, 1); 
                    ReleaseDC(hwndMain, hdc); 
 
                    // Store the character in the buffer. 
 
                    pchInputBuf[cch++] = ch; 
 
                    // Calculate the new horizontal position of the 
                    // caret. If the position exceeds the maximum, 
                    // insert a carriage return and move the caret 
                    // to the beginning of the next line. 
 
                    nCaretPosX += nCharWidth; 
                    if ((DWORD) nCaretPosX > dwLineLen) 
                    { 
                        nCaretPosX = 0; 
                        pchInputBuf[cch++] = 0x0D; 
                        ++nCaretPosY; 
                    } 
                    nCurChar = cch; 
                    ShowCaret(hwndMain); 
                    break; 
            } 
            SetCaretPos(nCaretPosX, nCaretPosY * dwCharY); 
            break; 
 
zgl7903 2017-11-16
  • 打赏
  • 举报
回复
那我建议你使用 RichEdit 控件, 比较容易操作, MSDN 上类似于编辑框功能的参考代码

/*
Displaying Keyboard Input
The example in this section shows how an application can receive characters from the keyboard, display them in the client area of a window, and update the position of the caret with each character typed. It also demonstrates how to move the caret in response to the left arrow, right arrow, home and end keystrokes, and shows how to highlight selected text in response to the shift+right arrow key combination. 

During processing of the WM_CREATE message, the window procedure shown in the example allocates a 64K buffer for storing keyboard input. It also retrieves the metrics of the currently loaded font, saving the height and average width of characters in the font. The height and width are used in processing the WM_SIZE message to calculate the line length and maximum number of lines, based on the size of the client area. 

The window procedure creates and displays the caret when processing the WM_SETFOCUS message. It hides and deletes the caret when processing the WM_KILLFOCUS message. 

When processing the WM_CHAR message, the window procedure displays characters, stores them in the input buffer, and updates the caret position. The window procedure also converts tab characters to four consecutive space characters. Backspace, linefeed, and escape characters generate a beep, but are not otherwise processed. 

The window procedure performs the left, right, end, and home caret movements when processing the WM_KEYDOWN message. While processing the action of the right arrow key, the window procedure checks the state of the shift key and, if it is down, selects the character to the right of the caret as the caret is moved. 

Note that the following code is written so that it can be compiled either as Unicode or as ANSI. If the source code defines UNICODE, strings are handled as Unicode characters; otherwise, they are handled as ANSI characters. 
*/
  • 打赏
  • 举报
回复
https://www.cnblogs.com/staring-hxs/archive/2013/01/09/2853126.html 看看这个对你有没有用
qq_38687221 2017-11-16
  • 打赏
  • 举报
回复
引用 3 楼 zgl7903 的回复:
https://technet.microsoft.com/zh-cn/library/9s2s80tk(v=vs.110).aspx The DoSuperclassPaint member function will work only with those control types that allow a device context to be passed as the wParam of a WM_PAINT message. This includes some of the standard Windows controls, such as SCROLLBAR and BUTTON, and all the common controls. For controls that do not support this behavior, you will have to provide your own code to properly display an inactive control.
这篇文章之前已经看过了,在OnOcmCommand()这个函数这一截没有完全看懂,文章的大概意思是说容器不想接收派生控件发送的消息,所以创建了一个反射窗口函数,在这个函数里面处理控件发送出去的消息,那么我应该怎么处理呢? 另外,下面英文描述跟我的问题其实没有多大关系,编辑控件也是标准控件,所以DoSupperClassPaint()函数是可以用的。 我的问题其实很简单,就是想在ActiveX控件工程派生的编辑控件中,修改它的背景色和文本颜色,及添加一些自定义的属性,想知道该怎么做而已。而msdn在这方面的描述也就只有上面那篇文章,细节上的处理就没有提到,查了很久都没查到什么,有没有大神出来顶一顶啊!
zgl7903 2017-11-16
  • 打赏
  • 举报
回复
https://technet.microsoft.com/zh-cn/library/9s2s80tk(v=vs.110).aspx The DoSuperclassPaint member function will work only with those control types that allow a device context to be passed as the wParam of a WM_PAINT message. This includes some of the standard Windows controls, such as SCROLLBAR and BUTTON, and all the common controls. For controls that do not support this behavior, you will have to provide your own code to properly display an inactive control.
qq_38687221 2017-11-16
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
注释掉DoSupperClassPaint(),全部改为自绘?
注释掉该语句,会出现一个问题,一开始加载该控件的时候没有绘图,要拉动他的时候才会重新绘制。但我觉得注释掉然后重绘的方法应该不对,我在msdn上有看过一个例子,同样是派生了一个列表框控件,该作者想在该控件上点击的时候显示文字,但因为这个控件是派生的控件,ondraw函数里面都已经做好,所以不能在里面进行绘图输出,反而他是通过点击时发送了一个消息让控件自己处理文字的绘制,所以我想绘制背景应该也可以通过相似的方法,但找到一个WM_CTLCOLOREDIT消息,但似乎没有像上文提到的列表控件那样的用法,不知道该如何下手。
此代码是随书光盘拷贝。 此版本是网上最详细的书签版本,也是最清晰的版本。 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》杂志的组稿编辑。 目录 鸣谢 序言 第ⅰ部分 windows和mfc基础  第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应用程序编程,以访问操作系统的基本特性和服务的书。它原本为以下两种编程人员所写:   曰打算学习MFC的WindowsAPl程序员   曰未进行过Windows编程的程序员   无论您属于哪种人,我假设您已经了解C++,而且熟悉C++语法,如派生类及虚函数。如果是这样的话,您已在征肠MFC编程之山的历险中迈出了坚实的第一步。   即使是有经验的Windo;。程序员在初读MFC代码时也会感到迷惑。一部分是由于VisualC++代码生成向导所生成的代码所致,另一个原因是因为无数行代码隐藏在MFC类库中。这正是本书使用特殊的方法来写MFC的缘由。本书从让您亲自手写代码开始(不用向导),使用MFCl.0的应用程序结构风格,也就是说,既不用文档也不用视图。只有在您掌:握了上述的基础知识,初步认识了简单的MFC类库如CWnd和CWinApp之后,我才开始介;绍向导并教您使用MFC的文档视图结构的方法。您将逐渐理解Windows的关键组件及它的消息驱动机制,如图形设备接口(GDl)。我相信用这种方法可以使MFC的学习变得生动有趣而不是令人气馁。我认为一旦您认真地学完这本书,然后再站在老练的Windows程序员的角度来回顾学习过程中的甜酸苦辣,您将同意我的观点。   本书分为4个部分。第1部分,介绍了Windows及MFC编程的主要原则,以一个示例程序"Hello,MFC"开始,然后逐一简要讲解菜单、控件、对话框以及其他用于组建应用程序的模块。第2部分,在第1部分的基础之上,对文档视图结构做详细讲解,特别是第9、10、11章,揭示了实现文档视图的神奇之处,不仅介绍了如何编写简单的文档视图程序,而且教您一些高级功能,如打印预览和拆分窗口视图。第3部分涵盖了一些Windows和MFC的更鬲级的功能,如颜色选项板、位图句柄及多线程程序。在第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》杂志的组稿编辑。 目录 鸣谢 序言 第ⅰ部分 windows和mfc基础  第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应用程序编程,以访问操作系统的基本特性和服务的书。它原本为以下两种编程人员所写:   曰打算学习MFC的WindowsAPl程序员   曰未进行过Windows编程的程序员   无论您属于哪种人,我假设您已经了解C++,而且熟悉C++语法,如派生类及虚函数。如果是这样的话,您已在征肠MFC编程之山的历险中迈出了坚实的第一步。   即使是有经验的Windo;。程序员在初读MFC代码时也会感到迷惑。一部分是由于VisualC++代码生成向导所生成的代码所致,另一个原因是因为无数行代码隐藏在MFC类库中。这正是本书使用特殊的方法来写MFC的缘由。本书从让您亲自手写代码开始(不用向导),使用MFCl.0的应用程序结构风格,也就是说,既不用文档也不用视图。只有在您掌:握了上述的基础知识,初步认识了简单的MFC类库如CWnd和CWinApp之后,我才开始介;绍向导并教您使用MFC的文档视图结构的方法。您将逐渐理解Windows的关键组件及它的消息驱动机制,如图形设备接口(GDl)。我相信用这种方法可以使MFC的学习变得生动有趣而不是
此版本是网上最详细的书签版本,也是最清晰的版本。 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》杂志的组稿编辑。 目录 鸣谢 序言 第ⅰ部分 windows和mfc基础  第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应用程序编程,以访问操作系统的基本特性和服务的书。它原本为以下两种编程人员所写:   曰打算学习MFC的WindowsAPl程序员   曰未进行过Windows编程的程序员   无论您属于哪种人,我假设您已经了解C++,而且熟悉C++语法,如派生类及虚函数。如果是这样的话,您已在征肠MFC编程之山的历险中迈出了坚实的第一步。   即使是有经验的Windo;。程序员在初读MFC代码时也会感到迷惑。一部分是由于VisualC++代码生成向导所生成的代码所致,另一个原因是因为无数行代码隐藏在MFC类库中。这正是本书使用特殊的方法来写MFC的缘由。本书从让您亲自手写代码开始(不用向导),使用MFCl.0的应用程序结构风格,也就是说,既不用文档也不用视图。只有在您掌:握了上述的基础知识,初步认识了简单的MFC类库如CWnd和CWinApp之后,我才开始介;绍向导并教您使用MFC的文档视图结构的方法。您将逐渐理解Windows的关键组件及它的消息驱动机制,如图形设备接口(GDl)。我相信用这种方法可以使MFC的学习变得生动有趣而不是令人气馁。我认为一旦您认真地学完这本书,然后再站在老练的Windows程序员的角度来回顾学习过程中的甜酸苦辣,您将同意我的观点。   本书分为4个部分。第1部分,介绍了Windows及MFC编程的主要原则,以一个示例程序"Hello,MFC"开始,然后逐一简要讲解菜单、控件、对话框以及其他用于组建应用程序的模块。第2部分,在第1部分的基础之上,对文档视图结构做详细讲解,特别是第9、10、11章,揭示了实现文档视图的神奇之处,不仅介绍了如何编写简单的文档视图程序,而且教您一些高级功能,如打印预览和拆分窗口视图。第3部分涵盖了一些Windows和MFC的更鬲级的功能,如颜色选项板、位图句柄及多线程程序。在第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类目录及头文件 类 描述 头文件 CAnimateCtrl 自动化通用控件 afxcmn.h CArchive afx.h CArchiveException afx.h CArray afxtempl.h CAsyncMonikerFile 在ActiveX控件中提供对异步标记的支持 afxole.h CAsyncScoket 封装Windows Sockets API,参看CSocket afxsock.h CBitmap afxwin.h CBitmapButton afxext.h CBrush afxwin.h CButton 按钮控件对象 afxwin.h CByteArray afxcoll.h CCachedDataPathProperty 允许一个ActiveX控件异步传输属性数据和缓冲内存中的数据,参考CDataPathProperty afxctl.h CCheckListBox afxwin.h CClientDC afxwin.h CCmdTarget 所有能够接收和响应消息的对象的基类 afxwin.h CCmdUI afxwin.h CColorDialog 颜色选择的通用对话框,提供为显示系统定义的颜色列表 afxdlgs.h CComboBox 组合框对象 afxwin.h CComboBoxEx CComboBox类的派生类,用于支持在组合框控件中的图像列表 afxcmn.h CCommandLineInfo afxwin.h CCommonDialog afxdlgs.h CConnectionPoint afxdisp.h CControlBar afxext.h CCreateContext afxext.h CCriticalSection afxmt.h CCtrlView afxwin.h CDaoDatabase afxdao.h CDaoException afxdao.h CDaoFieldExchange afxdao.h CDaoQueryDef afxdao.h CDaoRecordset 代表选自数据源的记录集。CDaoRecordset对象可用于三种格式:表类型记录集,动态集类型记录集和快照类型记录集 afxdao.h CDaoRecordView 提供表单视图,以在控件中显示数据库记录。表单视图是CDaoRecordset对象的一部分。参考CFormView和CRecordView afxdao.h CDaoTableDef afxdao.h CDaoWorkspace afxdao.h CDatabase afxdb.h CDataExchange afxwin.h CDataPathProperty 实现一个ActiveX控件属性,它能够异步加载其数据。这个类允许ActiveX控件在后台下载属性数据时被激活 afxctl.h CDateTimeCtrl 封装新的日期/时间选取器控件 afxdtctl.h CDBException afxdb.h CDBVariant afxdb.h CDC afxwin.h CDialog 用于包含控件窗口的对话框对象 afxwin.h CDialogBar afxext.h CDocItem afxole.h CDockState afxadv.h CDocObjectServer afxdocob.h CDocObjectServerItem afxdocob.h CDocTemplate afxwin.h CDocument 用于管理程序的数据的类 afxwin.h CDragListBox Windows列表框,允许用户把其中的项拖放到不同的位置 afxcmn.h CDumpContext afx.h CDWordArray afxcoll.h CEdit 用于文本输入的子窗口控件 afxwin.h CEditView 提供Windows编缉控件的功能。因为CEditView派生于Cedit,该对象可同文件和文件模板一同使用 afxext.h CEvent afxmt.h CException afx.h CFieldExchange afxdb.h CFile afx.h CFileDialog 通用文件对话框,提供Open和Save As对话框中的功能 afxdlgs.h CFileException afx.h CFileFind afx.h CFindReplaceDialog afxdlgs.h CFont afxwin.h CFontDialog 通用字体对话框,用于显示当前已装入系统的字体列表 afxdlgs.h CFontHolder afxctl.h CFormView 包含对话框控件的窗口 afxext.h CFrameWnd SDI(单窗口界面)框架窗口 afxwin.h CFtpConnection afxinet.h CFtpFileFind afxinet.h CGdiObject afxwin.h CGopherConnection afxinet.h CGopherFile afxinet.h CGopherFileFind afxinet.h CGopherLocator afxinet.h CHeaderCtrl 标题通用控件 afxcmn.h CHotKeyCtrl 热键通用控件 afxcmn.h CHtmlStream afxisapi.h CHtmlView 实现Web Browser控件的视图类,能够访问当地或Web上的HTML文件。 afxhtml.h CHttpConnection afxinet.h CHttpFile afxinet.h CHttpFilter 创建并处理超文传输协议过滤器对象,该对象用于过滤用于HTTP请求的服务器通知 afxisapi.h CHttpFilterContext afxisapi.h CHttpServer Internet Server API(ISAPI)的包装类 afxisapi.h CHttpServerContext afxisapi.h CImageList afxcmn.h CInternetConnection afxinet.h CInternetException afxinet.h CInternetFile afxinet.h CInternetSession afxinet.h CIPAddressCtrl IP地址控件。类似于编缉框,该控件接收Internet 协议格式的地址 afxcmn.h CList afxtempl.h CListBox 列表框对象 afxwin.h CListCtrl 列表视通用控件 afxcmn.h ClistView 简化CListCtrl的使用,添加了对文件和视图的支持 afxcview.h CLongBinary afxdb_.h CMap afxtempl.h CMapPtrToPtr afxcoll.h CMapPtrToWord afxcoll.h CMapStringToOb afxcoll.h CMapStringToPtr afxcoll.h CMapStringToString afxcoll.h CMapWordToOb afxcoll.h CMapWordToPtr afxcoll.h CMDIChildWnd MDI(多文档界面)子框架窗口 afxwin.h CMDIFrameWnd afxwin.h CMemFile afx.h CMemoryException afx.h CMemoryState CMenu afxwin.h CMetaFileDC afxext.h CMiniFrameWnd 半高的框架窗口,主要用于浮动工具栏。一个小框架窗口没有最小化和最大化按钮,但其他都类似于正常的框架窗口 afxwin.h CMonikerFile afxole.h CMonthCalCtrl 月历控件,用于显示一个用户可选择日期的日历 afxdtctl.h CMultiDocTemplate afxwin.h CMultiLock afxmt.h CMutex afxmt.h CNotSupportedException afx.h CObArray afxcoll.h CObject afx.h CObList afxcoll.h COleBusyDialog afxodlgs.h COleChangeIconDialog afxodlgs.h COleChangeSourceDialog afxodlgs.h COleClientItem afxole.h COleCmdUI afxdocob.h COleControl afxctl.h COleControlModule afxctl.h COleConvertDialog afxodlgs.h COleCurrency afxdisp.h COleDataObject afxole.h COleDataSource afxole.h COleDateTime afxdisp.h COleDateTimeSpan afxdisp.h COleDBRecordView afxoledb.h COleDialog afxodlgs.h COleDispatchDriver afxdisp.h COleDispatchException afxdisp.h COleDocObjectItem afxole.h COleDocument 把一个文件看作为CDocItem对象的一个集合。包容器和服务器都需要这个结构,因为它们的文件必须能够包含OLE项 afxole.h COleDropSource afxole.h COleDropTarget afxole.h COleException afxdisp.h COleInsertDialog afxodlgs.h COleIPFrameWnd afxole.h COleLinkingDoc OLE包容器文件的基类,这些文件支持对它们所包含项的链接 afxole.h COleLinksDialog afxodlgs.h COleMessageFilter afxole.h COleObjectFactory afxdisp.h COlePasteSpecialDialog afxodlgs.h COlePropertiesDialog afxodlgs.h COlePropertyPage afxctl.h COleResizeBar afxole.h COleSafeArray afxdisp.h COleServerDoc OLE服务器文件的基类 afxole.h COleServerItem 为OLE项提供一个服务器界面 afxole.h COleStreamFile afxole.h COleTemplateServer afxdisp.h COleUpdateDialog afxodlgs.h COleVariant afxdisp.h CPageSetupDialog afxdlgs.h CPaintDC afxwin.h CPalette afxwin.h CPen afxwin.h CPictureHolder afxctl.h CPoint atltypes.h CPrintDialog 通用打印对话框,提供Print和Print Setup对话框中的功能 afxdlgs.h CPrintInfo CProgressCtrl 通用进程指示器控件 afxcmn.h CPropertyPage 代表属性表单中的一页 afxdlgs.h CPropertyPageEx CPropertySheet 属性表,也叫做多选项卡对话框。一个属性表由一个CPropertySheet对象和几个CPropertyPage对象组成 afxdlgs.h CPropertySheetEx CPropExchange afxctl.h CPtrArray afxcoll.h CPtrList afxcoll.h CReBar afxext.h CReBarCtrl afxcmn.h CRecentFileList afxadv.h CRecordset 用于访问数据库表或查询的类 afxdb.h CRecordView 包含对话框控件的窗口 afxdb.h CRect atltypes.h CRectTracker afxext.h CResourceException afxwin.h CRgn afxwin.h CRichEditCntrItem afxrich.h CRichEditCtrl 用户能够输入和编缉文本的窗口,提供字符和程序段格式,以及对嵌入OLE项的支持 afxcmn.h CRichEditDoc afxrich.h CRichEditView afxrich.h CRuntimeClass CScrollBar 滚动条对象 afxwin.h CScrollView 可滚动的窗口,派生于CView afxwin.h CSemaphore afxmt.h CSharedFile afxadv.h CSingleDocTemplate afxwin.h CSingleLock afxmt.h CSize atltypes.h CSliderCtrl 提供包含一个滑块和可选的刻度线的窗口 afxcmn.h CSocket Windows Socket API的包装类 afxsock.h CSocketFile afxsock.h CSpinButtonCtrl 提供箭头按钮,用户可单击它,以增加或减少某个控件中的一个值 afxcmn.h CSplitterWnd afxext.h CStatic 用于标识另一个控件或给用户提供消息的简单文本框 afxwin.h CStatusBar afxext.h CStatusBarCtrl 提供一个层次窗口,通常放于父窗口的底部,用于显示关于应用程序的状态信息 afxcmn.h CStdioFile afx.h CString afx.h CStringArray afxcoll.h CStringList afxcoll.h CSyncObject afxmt.h CTabCtrl 允许应用程序在一个窗口或对话框的同一区域显示多个页面 afxcmn.h CTime afx.h CTimeSpan afx.h CToolBar afxext.h CToolBarCtrl 工具栏通用控件 afxcmn.h CToolTipCtrl 提供工具提示控件的功能,它以一个小弹出窗口的样子显示,包含描述某个工具用途的一行文本 afxcmn.h CTreeCtrl 显示项的分层结构列表 afxcmn.h CTreeView 简化CTreeCtrl的用法 afxcview.h CTypedPtrArray afxtempl.h CTypedPtrList afxtempl.h CTypedPtrMap afxtempl.h CUIntArray afxcoll.h CUserException afxwin.h CView 用于显示程序数据的类 afxwin.h CWaitCursor afxwin.h CWinApp afxwin.h CWindowDC afxwin.h CWinThread 代表一个应用程序中的一个线程 afxwin.h CWnd afxwin.h CWordArray afxcoll.h ......

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧