请详细解释dwp结构的作用

spdia 2001-02-09 02:52:00
主要是
BeginDeferWindowPos
DeferWindowPos
EndDeferWindowPos
在MDI中的作用以及与dwp结构的交互
有知道者请速告知(最好有例子)
谢谢!!谢谢!!
...全文
139 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhq2000 2001-02-09
  • 打赏
  • 举报
回复
Resizing the Windows
When I finished creating the windows, I had to find an easy way to resize the application's main window. In the C version, I used the handy DeferWindowPos function to resize all the windows at the same time. For those who are new to Win32, DeferWindowPos updates a structure that contains multiple window positions. You use this function as you would use the window enumeration functions—that is, you begin, defer, and end. This code illustrates how I resized all the windows:


BOOL ResizeWindows (HWND hwnd)
{
RECT rcl;
HDWP hdwp;

// Get the client area of the parent window.
GetClientRect (hwnd, &rcl);

// You will defer all the application's windows.
hdwp = BeginDeferWindowPos (NUM_WINDOWS);

// First, reset the size of the status bar.
DeferWindowPos (hdwp, g_Listing.hWndStatus, NULL, 0, 0,
rcl.right - rcl.left, 20, SWP_NOZORDER | SWP_NOMOVE);

// Next, reset the size of the toolbar.
DeferWindowPos (hdwp, g_Listing.hWndToolbar, NULL, 0, 0,
rcl.right - rcl.left, 20, SWP_NOZORDER | SWP_NOMOVE);

// Next, reset the size of the tree view control.
DeferWindowPos (hdwp, g_Listing.hWndTreeView, NULL, 0, 0,
(rcl.right - rcl.left ) / 4, rcl.bottom - rcl.top - 46,
SWP_NOZORDER | SWP_NOMOVE);

// Last, reset the size of the list view control.
DeferWindowPos (hdwp, g_Listing.hWndListView, NULL,
(rcl.right - rcl.left ) / 4, 27,
(rcl.right - rcl.left) - ((rcl.right - rcl.left) / 4),
rcl.bottom - rcl.top - 46,
SWP_NOZORDER);

return EndDeferWindowPos (hdwp);
}

In MFCEXP, I added a handler for the WM_SIZE message, OnSize, to set the window positions for all the windows. The CToolBarCtrl class includes AutoSize, a special member function that resizes the toolbar to fit within the parent window.


void CMfcexpView::OnSize (UINT nType, int cx, int cy)
{
CView::OnSize (nType, cx, cy);

// Resize the toolbar.
m_Toolbar.AutoSize ();

// Resize the status bar.
// Make it fit along the bottom of the client area.
m_StatusBar.MoveWindow (0, cx - 10, cy, cy - 10);

// Set the rectangle for each part of the status bar.
// Make each 1/2 the width of the client area.
int aWidths [2];

aWidths [0] = cx / 2;
aWidths [1] = -1;
m_StatusBar.SetParts (2, aWidths);

m_TreeCtl.MoveWindow (0, 25, cx / 4, cy - 45);

m_ListCtl.MoveWindow (cx / 4, 25, cx, cy - 45);
}

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧