devxlogo

Can I programmatically move a control in a window in Visual C++?

Can I programmatically move a control in a window in Visual C++?

Question:
I’m beginning the design of an application where it would be advantageous to be able to programmatically move the position of a control on its form. Is it possible to do this using Visual C++?

Answer:
Yes, all control classes (ie CEdit, CListBox, CStatic, etc) in Visual C++ are derived from CWnd, the base class containing all the fundamental functionality of a Window. Please keep in mind that neither CWnd nor any of its decendents are Window Controls but are merely C++ classes that strongly wrap Window API functions that permit communication with Window Controls such as sending a message to control to reposition itself. Hence having said that, to reposition a control on a window using Visual C++ with MFC, you could call either CWnd:: MoveWindow or CWnd:: SetWindowPos depending your needs. MoveWindow allows you to change the position and dimensions of a specified Window Control, and SetWindowPos allows you to change the position, dimensions and Z-order of a child, popup and top level windows. Z-order is the order of window on a stack of windows that reside on the Z axis which is an imaginary line that sticks straight out from the screen. For example if you want to move a button control on a CFormView derived class 26 screen units (pixels) down the Y axis from its current position you could do the following: 1. void CMyFormView::OnInitialUpdate() 2. { 3. CFormView::OnInitialUpdate(); 4. 5. // Retrieve a pointer to the button control. 6. CButton* pBtn = (CButton*)GetDlgItem(IDC_BUTTON1); 7. ASSERT(pBtn); 8. // Structure used to store the button control’s dimensions. 9. RECT rect; 10. // Get button control’s dimensions with respect to the screen. 11. pBtn->GetWindowRect(&rect); 12. // Convert the button control’s dimensions with respect to its parent window. 13. ScreenToClient(&rect); 14. // Adjust button control’s dimensions +26 pixels down the Y axis. 15. rect.top +=26; 16. rect.bottom +=26; 17. 18. // Move the button control 26 pixels down the Y axis. 19. pBtn->MoveWindow(&rect); 20. }

See also  Professionalism Starts in Your Inbox: Keys to Presenting Your Best Self in Email
devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist