Restricting the size of an OCX
Norman_Almond@Europe.notes.pw.com Monday, September 30, 1996 Environment: Environment: VC++ 4.2, Win 95 Subject: Restricting the size of an OCX Hi All I currently developing a specialized calendar widget in the form of a child window. I'm am now converting this project into an OCX (No Problemo!). The problem I am having is: 1. I want to set the OCX at a particular size in the CCalCtrl::OnCreate function and update the calendar window without putting any code in CCalCtrl::OnDraw function. 2. I then want to prevent the OCX from being resized when in design mode. I can set the size of the control by using SetControlSize but the child window doesn't paint correctly. I've looked thru MSDN and Samples nothing seems to prevent any OCX from resizing. Has anyone come across any code to do the above. TIA. Regards // NormSki
SBERTRAN.US.ORACLE.COM -- SBERTRAN@us.oracle.com Thursday, October 03, 1996 [Mini-digest: 2 responses] To restrict the control's size during design time: 1. In the constructor of the control class (CCalCtrl::CCalCtrl for you), add a call to SetInitialSize: // Restrict size of control SetInitialSize(cx, cy) where cx is the initial width of the control, and cy is the initial height of the control. If your control is represented in design time by an icon, then cx should probably be 15 and cy should be 14. If it is a graphical representation, then just play around with the width and height. 2. If your control is represented by an icon, override the OnDraw function (if you haven't already) and add the following code: CBitmap bitmap; BITMAP bmp; CPictureHolder picHolder; CRect rcSrcBounds; // Load ORACD bitmap bitmap.LoadBitmap(IDB_ORACD); bitmap.GetObject(sizeof(BITMAP), &bmp); rcSrcBounds.right = bmp.bmWidth; rcSrcBounds.bottom = bmp.bmHeight; // Create picture and render picHolder.CreateFromBitmap((HBITMAP)bitmap.m_hObject, NULL, FALSE); picHolder.Render(pdc, rcBounds, rcSrcBounds); This code will load your control's icon and display it when the control is drawn. Also override the OnSetExtent function of your control class and add this code: // Some containers can't handle the control directly // modifying the provided lpSizeL structure. So we // create a copy to modify and pass it on to the COleControl // implementation SIZEL sizeL; // Ensure that the icon is always sized // as 32x32 pixels CDC cdc; cdc.CreateCompatibleDC(NULL); CSize size(15,14); // Convert the device points to HIMETRIC // OLE uses HIMETRICE measurements cdc.DPtoHIMETRIC(&size); sizeL.cx = size.cx; sizeL.cy = size.cy; // Call the parent implementation return COleControl::OnSetExtent(&sizeL); This code will ensure that the control remains the size of the icon when its extent needs to be changed (e.g. when the user resizes the control). Hope this helps... Shawn Bertrand, Developer Oracle Corporation-OLAP Products Division 200 Fifth Avenue | mail: sbertran@us.oracle.com Waltham, MA 02154 | phone: (617) 684-5690 "If you drink, don't drive. Don't even putt." - Dean Martin -----From: "Julius Hamelberg"You'll need to override: OnSetExtent(LPSIZEL lpSizeL); Take a look at: http://www.sky.net/~toma/faqgen.htm#Restrict - J
| Вернуться в корень Архива |