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 指针曲折转换得到的,不用程序员操心了。
*************************************************