MFC(注一下吧,代码是看vs2010的...)BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 函数的参数CREATESTRUCT,参考源代码,实在传入函数LPCTSTR CFrameWnd::GetIconWndClass(DWORD dwDefaultStyle, UINT nIDResource)中新定义的,那么cs中的参数cx,cy被改动后,怎么对实际的frame创建产生影响呢?AfxCtxGetClassInfo(AfxGetInstanceHandle(), cs.lpszClass, &wndcls)
AfxRegisterWndClass(wndcls.style, wndcls.hCursor, wndcls.hbrBackground, hIcon);
貌似没有提到cx,cy的问题下面是MFC的源代码就是明确一下cx,cy被传到哪里去了,在哪里起作用具体创建窗口的函数是什么,先谢了
LPCTSTR CFrameWnd::GetIconWndClass(DWORD dwDefaultStyle, UINT nIDResource)
{
ASSERT_VALID_IDR(nIDResource);
HINSTANCE hInst = AfxFindResourceHandle(
ATL_MAKEINTRESOURCE(nIDResource), ATL_RT_GROUP_ICON);
HICON hIcon = ::LoadIconW(hInst, ATL_MAKEINTRESOURCEW(nIDResource));
if (hIcon != NULL)
{
CREATESTRUCT cs;
memset(&cs, 0, sizeof(CREATESTRUCT));
cs.style = dwDefaultStyle;
PreCreateWindow(cs);
// will fill lpszClassName with default WNDCLASS name
// ignore instance handle from PreCreateWindow. WNDCLASS wndcls;
if (cs.lpszClass != NULL &&
AfxCtxGetClassInfo(AfxGetInstanceHandle(), cs.lpszClass, &wndcls) &&
wndcls.hIcon != hIcon)
{
// register a very similar WNDCLASS
return AfxRegisterWndClass(wndcls.style,
wndcls.hCursor, wndcls.hbrBackground, hIcon);
}
}
return NULL; // just use the default
}
AfxRegisterWndClass(wndcls.style, wndcls.hCursor, wndcls.hbrBackground, hIcon);
貌似没有提到cx,cy的问题下面是MFC的源代码就是明确一下cx,cy被传到哪里去了,在哪里起作用具体创建窗口的函数是什么,先谢了
LPCTSTR CFrameWnd::GetIconWndClass(DWORD dwDefaultStyle, UINT nIDResource)
{
ASSERT_VALID_IDR(nIDResource);
HINSTANCE hInst = AfxFindResourceHandle(
ATL_MAKEINTRESOURCE(nIDResource), ATL_RT_GROUP_ICON);
HICON hIcon = ::LoadIconW(hInst, ATL_MAKEINTRESOURCEW(nIDResource));
if (hIcon != NULL)
{
CREATESTRUCT cs;
memset(&cs, 0, sizeof(CREATESTRUCT));
cs.style = dwDefaultStyle;
PreCreateWindow(cs);
// will fill lpszClassName with default WNDCLASS name
// ignore instance handle from PreCreateWindow. WNDCLASS wndcls;
if (cs.lpszClass != NULL &&
AfxCtxGetClassInfo(AfxGetInstanceHandle(), cs.lpszClass, &wndcls) &&
wndcls.hIcon != hIcon)
{
// register a very similar WNDCLASS
return AfxRegisterWndClass(wndcls.style,
wndcls.hCursor, wndcls.hbrBackground, hIcon);
}
}
return NULL; // just use the default
}
2,程序员有机会重写这个虚函数【好像是虚函数】,来修改CREATESTRUCT& cs的成员的值,来参与创建前的一些参数。
3,框架的流程,程序员是要知道的,这里你要知道MFC在CreateWIndow之前,会回调PreCreateWindow这个函数。
恩恩,这些表示都了解的,但是无论是第一次调用PreCreateWindow,还是回调,cx,cy的值传出之后又被传到哪里去了呢?
引用(CREATESTRUCT& cs)可以说是相当于设置cx,cy吧,将它们的信息告诉了GetIconWndClass,然后呢?GetIconWndClass又将它们储存在哪里,告诉了哪些函数,进行了哪些操作呢?