VC技巧

        CString str = "Hello/r/nHow are you/r/n";
    为什么pDC->TextOut(0, 0, str);显示时不能够自动换行?  
如果你的视图类是CEditView,这样做是行的通的但是,如果在CView里面,这样就不行,这也很容易理解CView里面没有行的概念,它就像按象素编址的白纸(一个二维平面)在白纸上换行,显然是行不通的,因为它不知道下一行的具体位置
*************************************
    我想在子线程中直接给视图窗口绘图,而不调用视图类的函数OnDraw(),在子线程中获得资源,可以在子线程的构造函数中传入CMyThread(CWnd* pWnd,HDC hDC,。。)
    这样,在主线程中创建子线程时 mythread(this,m_pDC->m_hDC)
    其中m_pDC=m_pDC=new CClientDC(this);
**********************************
    我在程序中需要生成随机数,: 但是rand()生成的是0~指定的数之间的随机数, 例如我想生成10~20之间的5个随机数,应该如何做?
        int result[5];
        srand();
        for(int i=0;i<5;i++)
        {
            result[i]=rand()%11+10;
            srand();
        }    
**************************************
    VC中让程序发出声因
        beep()
********************************  
    获取当前屏幕分辨率
        int nScreenWidth=GetSystemMetrics(SM_CXSCREEN);
        int nScreenHeight=GetSystemMetrics(SM_CYSCREEN);
************************************
    把消息从一个view发到另外一个view在CWinApp里面保存view的指针。然后再任意地方就可以通过AfxGetApp()调用获得view的指针。That is ok!
***********************************
    如何在视图类函数中得到HDC句柄得到可以用GetDC,释放用ReleaseDC,句柄是CDC的成员变量返回的是CDC对象,但里面有一个成员变量,好像是m_hCDC之类的是句柄
*********************************
    注册控件
        regsvr32
-**************************************
    CTypePtrArray跟CObArray本质区别
    CTypePtrArray有两种基本框架类型,CObArray和CPtrArray,里面的数据类型可以是对象或者指向对象的指针;所以,它是一个模板类,它的可串行化依赖于它到底是以CObArray还是以CPtrArray为基本框架,它是类型安全的.CObArray,顾名思义,是对象的数组,所以里面是存放对象的.它不是模板类,可串行化,不是类型安全的.
**************************************
vc中的extern "c"  如何使用?
发信站: 武汉白云黄鹤站 (2003年05月16日21:57:11 星期五), 站内信件

    假设某个C 函数的声明如下:
        void foo(int x, int y);
    该函数被C 编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能直接调用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。
    例如:
        extern “C”
        {
            void foo(int x, int y);
             // 其它函数
        }
    或者写成
        extern “C”
        {
            #include “myheader.h”
            . // 其它C 头文件
        }
    这就告诉C++编译译器,函数foo 是个C 连接,应该到库中找名字_foo 而不是找_foo_int_int。C++编译器开发商已经对C 标准库的头文件作了extern“C”处理
*****************************************************
*VC++下怎样设置栈的大小
    方法一:STACKSIZE   定义.def文件

        语法:STACKSIZE reserve[,commit]
        reserve:栈的大小;commit:可选项,与操作系统有关,在NT上只一次分配物理内存的大小

方法二:设定/STACK

    打开工程,依次操作菜单如下:Project->Setting->Link,在Category 中选中Output,然后
在Reserve中设定堆栈的最大值和commit。

注意:reserve默认值为1MB,最小值为4Byte;commit是保留在虚拟内存的页文件里面,它设置的较大会使栈开辟较大的值,可能增加内存的开销和启动时间 
**********************************************************
    鼠标移动到适当的位置时改变光标
        void CM_curosrView::OnMouseMove(UINT nFlags, CPoint point)
        {
            // TODO: Add your message handler code here and/or call default
            SetCursor(Cross);
            //

            CView::OnMouseMove(nFlags, point);
        }

    其中HCURSOR Cross在构造函数中被初始化成
        Cross = AfxGetApp()->LoadStandardCursor(IDC_CROSS);

    只要移动,即为十字标     
********************************************************
如何发送一个关于某个按钮单击的消息
    试试这两种:
        1、GetDlgItem(IDOK)->PostMessage(BM_CLICK,0,0);
    这种是某位高人说的,没试过。这种是直接发送给按钮窗口的,是窗口消息。

        2、PostMessage(WM_COMMAND,IDOK|BN_CLICKED<<16,GetDlgItem(IDOK)->m_hWnd);
    这个是我自己找的一种方法。这个是发送给按钮父窗口的,是通知消息。
******************************************************
什么函数能获取本地IP
    虽然感觉很滥,直接调用ipconfig。    这个程序肯定是每台机器有得,
    windows自己保证,所以你调用就可以方便获得了。
**********************************
    得到windows和system目录路径的函数
        getwindowsdirectory
        getsystemdirectory   
***********************************
1:使用vc开发项目时,常会遇到这种情况: 
    即明明只改动了一个文件,却要把整个项目全部重新编译连接一次。刚刚连接好,一运行,又提示重新编译连接一次。非常讨厌。这是因为出现了 未来文件 的缘故。(vc5的bug?) 
    解决方法:找出对应文件夹下的debug目录,将未来文件全部delete, 
                        再rebuild all一次。(未来 文件即其创建和修改时间都比系统时间靠后)
 
2: 有时,workspace中的classview显示混乱。其表现如下: 
        1:添加的成员变量或函数不能显示; 
        2:即使显示出来了变量或函数,双击后不能跳至正确的位置。 
    解决方法: 
        删除.ncb文件,再rebuld all.
 
3: 如何干净的删除一个类? 
        1:先从workspace中的FileView中删除对应的.h和.cpp文件。 
        2.再关闭项目,从实际的文件夹中删除对应的.h和.cpp文件。 
        3.灾删除.clw文件。 
        打开项目,rebuld all。
 
4: 初学者常有这样的疑惑: 
        直接望工程文件里加入一个CPP原文件再编译连接的话 老是提示没有找到预编译头 
        解决方法: 
            #include "stdafx.h"
 
5: 如何向项目中加入自己定义的类? 
        方法很多,介绍一个简便的: 
            选择Insert/New Class菜单 
            弹出对话框; 
            选择Class Type为generic; 
            输入类名。 
        当然,也可以自己决定该类的基类
6. 通过DLL共享变量 
    a. 用#pragma data_seg(“segname”) 创建一个节 
        #pragma data_seg(“share”) 
            LONG g_lShareData=0; 
        #pragma data_seg()
    b. 在连接器的命令行中使用/SECTION:name attributes开关 
        //SECTION:share,RWS 
        或在源代码中嵌入连接开关: 
            #pragma comment(linker,”/SECTION:share,RWS”)
 
7. 动态连接库的隐式连接 
    a. DLL输出函数的头文件:输出函数前加_declspec(dllexport);EXE输入函数的头文件: 
        输入函数前加_delcspec(dllimport)。 
    b. 在EXE工程项目设置的Link页面的Object/Libaray Modules 中添加DLL对应的LIB文件(该文件是在生成DLL的同时生成的)。
 
8. 用FindFirstChangeNotification(…)来检测文件系统的变化。 
    先用FindFirstChangeNotification登记要监测的文件夹,然后用WaitForSingleObject等函数来等待文件变化事件的到来,并处理该时间。在处理后如果需要继续监测,那么还要调用FindNextChangeNotification(…)。
***********************************************
怎样在c++里得到文件长度
    HANDLE hFile;
    hFile = CreateFile(lpcTheFile, GENERIC_READ | GENERIC_WRITE, 0, NULL,
                         CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

    if (hFile != INVALID_HANDLE_VALUE) {
            DWORD dwFileSize = GetFileSize(hFile,  NULL);
            CloseHandle(hFile);
    }       
*********************************************
*MessageBox()与AfxMessageBox()的区别
    C 中可调用的涵数大致可分三类:
        1.类自己的涵数,只对类自己的数据成员有作用;
        2.AFX小组在设计 Application Framworks 时设计的全局函数,多冠在Afx前缀,在包含了MFC库/框架的工程中可用;
        3.Windows API的全局函数。对所有Windows平台下的程序设计都可以调用,如Vb,Vc,Dephi等等。
    你说的 MessageBox是属于 CWnd 类的成员函数,只能在 CWnd 和CWnd的派生类的对象中调用;AfxMessageBox则可在任何地方调用。
    另外对应的还有: ::MessageBox()这个windows API的全局函数。
    上述中1和3一般有一个区别,就是1要比3少一个参数,即窗口句柄。大家知道,这个句柄是通过 this 指针曲折转换得到的,不用程序员操心了。 
************************************************* 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值