一.联合体
联合表示几个变量公用一个内存位置, 在不同的时间保存不同的数据类型
和不同长度的变量。如下,每次修改变量,其他的变量都会跟着改变
union a_bc{ int i; char mm; } a; void main(){ a.i=80; a.mm='1';}
联合体的大小以其中最大的数据项为准
二.com智能指针
三.创建子窗体
介绍
最原始的CreateWindow api
CreateWindowExW( __in DWORD dwExStyle, __in_opt LPCWSTR lpClassName, __in_opt LPCWSTR lpWindowName, __in DWORD dwStyle, __in int X, __in int Y, __in int nWidth, __in int nHeight, __in_opt HWND hWndParent, __in_opt HMENU hMenu, __in_opt HINSTANCE hInstance, __in_opt LPVOID lpParam);
CWnd对其进行了封装,其提供了Create(传入CWnd)和CreateEx方法(传入HWND)
BOOL CWnd::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext){ // can't use for desktop or pop-up windows (use CreateEx instead) ASSERT(pParentWnd != NULL); ASSERT((dwStyle & WS_POPUP) == 0); return CreateEx(0, lpszClassName, lpszWindowName, dwStyle | WS_CHILD, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, pParentWnd->GetSafeHwnd(), (HMENU)(UINT_PTR)nID, (LPVOID)pContext);}
CreateEx方法
创建了一个结构体(有必要吗),然后又调用了AfxCtxCreateWindowEx方法,AfxCtxCreateWindowEx会调用CreateWindowEx方法
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 = ::AfxCtxCreateWindowEx(cs.dwExStyle, cs.lpszClass, cs.lpszName, cs.style, cs.x, cs.y, cs.cx, cs.cy, cs.hwndParent, cs.hMenu, cs.hInstance, cs.lpCreateParams);
四. && SetWindowPlacement
貌似搞不定max和min…没啥意义…
五.判断窗体是否最大化和最小化
IsIconic和IsZoomed