原创 VC++技术内幕笔记收藏

新一篇: 馒头渣! | 旧一篇: vc6点击打开时devshl.dll出错的解决方案!

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

发表于 @ 2007年09月22日 10:03:00|评论(loading...)|编辑

新一篇: 馒头渣! | 旧一篇: vc6点击打开时devshl.dll出错的解决方案!

评论:没有评论。

发表评论  


登录
Csdn Blog version 3.1a
Copyright © F4