WEB开发网
开发学院软件开发VC Visual C++ MFC 简明教程(4) 阅读

Visual C++ MFC 简明教程(4)

 2007-03-18 21:27:52 来源:WEB开发网   
核心提示: 你可能已经注意到了,至今为止所有的代码都不能很好地处理尺寸变化,Visual C++ MFC 简明教程(4)(5),当窗口变化大小时,窗口的框架会做相应的调整,该消息来自窗口本身,而不是作为ON_COMMAND消息由按钮向其父窗口发送的,但是窗口中调的内容仍原处不动,可以通过处理尺寸变化的

你可能已经注意到了,至今为止所有的代码都不能很好地处理尺寸变化。当窗口变化大小时,窗口的框架会做相应的调整,但是窗口中调的内容仍原处不动。可以通过处理尺寸变化的事件来更好的处理这一问题。任何窗口发送的消息之一就是变尺寸消息。该消息是当改变形状时发出的。我们可以使用该消息来控制框架中子窗口的大小,如下所示:

  // button3.cpp
   #include
   #define IDB_BUTTON 100
   // Declare the application class
   class CButtonApp : public CWinApp
   {
   public:
   virtual BOOL InitInstance();
   };
   // Create an instance of the application class
   CButtonApp ButtonApp;
   // Declare the main window class
   class CButtonWindow : public CFrameWnd
   {
   CButton *button;
   public:
   CButtonWindow();
   afx_msg void HandleButton();
   afx_msg void OnSize(UINT, int, int);
   DECLARE_MESSAGE_MAP()
   };
   // A message handler function
   void CButtonWindow::HandleButton()
   {
   MessageBeep(-1);
   }
   // A message handler function
   void CButtonWindow::OnSize(UINT nType, int cx,
   int cy)
   {
   CRect r;
   GetClientRect(&r);
   r.InflateRect(-20,-20);
   button->MoveWindow(r);
   }
   // The message map
   BEGIN_MESSAGE_MAP(CButtonWindow, CFrameWnd)
   ON_BN_CLICKED(IDB_BUTTON, HandleButton)
   ON_WM_SIZE()
   END_MESSAGE_MAP()
   // The InitInstance function is called once
   // when the application first executes
   BOOL CButtonApp::InitInstance()
   {
   m_pMainWnd = new CButtonWindow();
   m_pMainWnd->ShowWindow(m_nCmdShow);
   m_pMainWnd->UpdateWindow();
   return TRUE;
   }
   // The constructor for the window class
   CButtonWindow::CButtonWindow()
   {
   CRect r;
   // Create the window itself
   Create(NULL,
  "CButton Tests",
   WS_OVERLAPPEDWINDOW,
   CRect(0,0,200,200));
   // Get the size of the client rectangle
   GetClientRect(&r);
   r.InflateRect(-20,-20);
   // Create a button
   button = new CButton();
   button->Create("Push me",
   WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
   r,
   this,
   IDB_BUTTON);
   }

为了理解上面的代码,从窗口的消息映射开始。你会发现入口ON_WM_SIZE。该入口表示消息映射是对来自CButtonWindow对象的变尺寸消息发生响应。变尺寸消息是当用户改变窗口的大小时产生的。该消息来自窗口本身,而不是作为ON_COMMAND消息由按钮向其父窗口发送的。这是因为窗口框架不是子窗口。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:Visual MFC 简明教程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接