hur.cn - 华软网

 热门搜索

关于MFC里面的WINMIAN和CWINAPP

  作者:未知    来源:网络    更新时间:2011/9/19
编译器不是可以在链接的时候,链接twinmain函数,然后在里面使用afxwinmian函数,完成窗口的初始化,那cwinapp又是做什么的?
---华软 网友回答---
An application object provides member functions for initializing your application (and each instance of it) and for running the application. 

Each application that uses the Microsoft Foundation classes can only contain one object derived from CWinApp. This object is constructed when other C++ global objects are constructed and is already available when Windows calls the WinMain function, which is supplied by the Microsoft Foundation Class Library. Declare your derived CWinApp object at the global level. 

---华软网友回复---
有大侠能说一下,设计窗口类,注册窗口类,是在cmainframe还是在InitInstance里面完成的?
---华软网友回复---
参考一下CWnd::CreateEx函数
C++">
BOOL CWnd::CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName,
LPCTSTR lpszWindowName, DWORD dwStyle,
int x, int y, int nWidth, int nHeight,
HWND hWndParent, HMENU nIDorHMenu, LPVOID lpParam)
{
// allow modification of several common create parameters
CREATESTRUCT cs;
cs.dwExStyle = dwExStyle;
cs.lpszClass = lpszClassName;
cs.lpszName = lpszWindowName;
cs.style = dwStyle;
cs.x = x;
cs.y = y;
cs.cx = nWidth;
cs.cy = nHeight;
cs.hwndParent = hWndParent;
cs.hMenu = nIDorHMenu;
cs.hInstance = AfxGetInstanceHandle();
cs.lpCreateParams = lpParam;

if (!PreCreateWindow(cs))
{
PostNcDestroy();
return FALSE;
}

AfxHookWindowCreate(this);
HWND hWnd = ::CreateWindowEx(cs.dwExStyle, cs.lpszClass,
cs.lpszName, cs.style, cs.x, cs.y, cs.cx, cs.cy,
cs.hwndParent, cs.hMenu, cs.hInstance, cs.lpCreateParams);

#ifdef _DEBUG
if (hWnd == NULL)
{
TRACE1("Warning: Window creation failed: GetLastError returns 0x%8.8X\n",
GetLastError());
}
#endif

if (!AfxUnhookWindowCreate())
PostNcDestroy();        // cleanup if CreateWindowEx fails too soon

if (hWnd == NULL)
return FALSE;
ASSERT(hWnd == m_hWnd); // should have been set in send msg hook
return TRUE;
}
这个函数里面调用了PreCreateWindow()函数,你F11进入看看不就明白了

---华软网友回复---
迷糊了,看视频,说是在CMainFrame里面调用PreCreateWindow函数完成窗口的创建,但是,后面又说是在InitInstance()函数里面完成了包括窗口的设计,注册,创建,显示,更新,消息循环,彻底迷糊了
---华软网友回复---
CMainFrame()类里面的PreCreateWindow()函数是完成窗口的创建和注册
CWINAPP类里面的InitInstance()函数,又被说是完成了窗口的注册创建显示所有工作的函数,彻底迷糊了      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。