关闭

VC++技术内幕笔记

980人阅读 评论(0) 收藏 举报

??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的。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:24001次
    • 积分:392
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:4篇
    • 译文:0篇
    • 评论:13条
    最新评论