您的位置:首页 > 编程语言 > C语言/C++

VC++技术内幕笔记

2007-09-22 10:03 211 查看
??1。CWinApp::Run()成员函数。Run函数被隐藏在基类中,他用来负责传递应用程序的消息给相应的窗口,从而维护着应用程序的运转。WinMain在调用 InitInstance之后紧接着调用Run。

2。获取程序主窗口指针。AfxGetApp()->m_pMainWnd

3。CRect有一个成员函数PtInRect用来测试一个点是否落在某个矩形内。只适用于设备坐标系。CRgn的PtInRegion。

4。MM_TWIPS映射模式常用于打印机。一个twip单位等于1/20磅。1磅等于1/72英寸。水晶报表中的PageMargins单位就是twip。

5。CScrollView::OnPrepareDC(),该函数根据传给SetScrollSizes的第一个参数来设置映射模式,并根据当前滚动位置来设置窗口的原点。

6。GetDlgItem()返回CWnd指针因为控件对象并没有调用构造函数,这些指针是临时的,不能存储供以后使用。如果需要把CWnd指针转化成一个控件ID,可以使用CWnd::GetDlgCtrlID()函数。

7。定制通用对话框,如打开文件对话框,从通用对话框类进行派生。详见第四版7.3节。

8。多线程中使用全局变量会有问题,除了加volatile标志以外,还可以使用InterlockedIncrement函数。

9。如果蔡单项没有相应的命令消息控制函数,应用程序框架就会禁用该菜单项,由CFrameWnd的数据成员m_bAutoMenuEnable决定。

10。

BEGIN_MESSAGE_MAP(CPaintDlg, CDialog)
ON_COMMANDEX(IDM_ZOOM_1,OnZoom)

ON_COMMANDEX(IDM_ZOOM_2,OnZoom)
END_MESSAGE_MAP()

OnZoom(UINT nID)

{

if(nID == IDM_ZOOM_1) {...}

else {...}

}

其他宏还有ON_COMMAND_RANGE,ON_COMMAND_EX_RANGE,ON_UPDATE_COMMAND_UI_RANGE

11。如果一个exe需要一个资源,搜索顺序为,首先是exe文件,然后是扩展dll,再是mfc dll,如果扩展dll装入一个资源,则搜索顺序为,首先是扩展dll,然后是mfc dll,再是exe,改变搜索序列可以通过:

HINSTANCE hInstResourceClient=AfxGetResourceHandle();

//use dll's instance handle

AfxSetResourceHandle(::GetModuleHandle("mydllname.dll");

CString strRes;

strRes.LoadString(IDS_MYSTRING);

//Restore client's instance handle

AfxSetResourceHandle(hInstResourceClient);

不能用AfxGetInstanceHandle来代替(::GetModuleHandle,在一个扩展dll里,AfxGetInstanceHandle返回的是exe的实例句柄,而不是dll的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: