mirror of
				https://github.com/bobranten/Ext4Fsd.git
				synced 2025-10-30 13:28:31 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			137 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // DiskBox.cpp : implementation file
 | |
| //
 | |
| 
 | |
| #include "stdafx.h"
 | |
| #include "DiskBox.h"
 | |
| 
 | |
| #ifdef _DEBUG
 | |
| #define new DEBUG_NEW
 | |
| #undef THIS_FILE
 | |
| static char THIS_FILE[] = __FILE__;
 | |
| #endif
 | |
| 
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| // CDiskBox
 | |
| 
 | |
| CDiskBox::CDiskBox()
 | |
| {
 | |
|     m_nID = IDC_PROPERTY_DEVICE;
 | |
|     m_nLeft = 10;
 | |
|     m_nSize = 80;
 | |
| }
 | |
| 
 | |
| CDiskBox::~CDiskBox()
 | |
| {
 | |
| }
 | |
| 
 | |
| BEGIN_MESSAGE_MAP(CDiskBox, CButton)
 | |
| 	//{{AFX_MSG_MAP(CDiskBox)
 | |
| 	ON_WM_SETFOCUS()
 | |
| 	ON_CBN_SELCHANGE(IDC_PROPERTY_DEVICE, OnSelectChanged)
 | |
| 	//}}AFX_MSG_MAP
 | |
| END_MESSAGE_MAP()
 | |
| 
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| // CDiskBox message handlers
 | |
| 
 | |
| void CDiskBox::OnSelectChanged()
 | |
| {
 | |
|     GetParent()->SendMessage(WM_GROUP_BOX_UPDATED, 'GB', 'DVLU');
 | |
| }
 | |
| 
 | |
| void CDiskBox::PreSubclassWindow() 
 | |
| {
 | |
|     //
 | |
| 	// Make sure that this control has the BS_ICON style set.
 | |
| 	// If not, it behaves very strangely:
 | |
| 	//  It erases itself if the user TABs to controls in the dialog,
 | |
| 	//  unless the user first clicks it.  Very strange!!
 | |
|     //
 | |
| 
 | |
| 	ModifyStyle(0, BS_ICON|WS_TABSTOP|WS_GROUP);
 | |
| 
 | |
| 	CString	strTitle;
 | |
| 	GetWindowText(strTitle);
 | |
| 
 | |
| 	int nWidth = AssemblingTitle();
 | |
| 
 | |
| 	CRect	r;
 | |
| 	GetWindowRect(&r);
 | |
| 	ScreenToClient(r);
 | |
| 
 | |
| 	r.OffsetRect(m_nLeft, 0);
 | |
| 	r.bottom = r.top + m_nSize;
 | |
| 	r.right = r.left + m_nSize + nWidth;
 | |
| 
 | |
|     m_ComboBox.Create(WS_CHILD | CBS_DROPDOWN | WS_VSCROLL |
 | |
|                       CBS_NOINTEGRALHEIGHT | CBS_DROPDOWNLIST,
 | |
|                       r, this, m_nID);
 | |
| 	m_ComboBox.SetFont(GetFont(), true);
 | |
| 	m_ComboBox.ShowWindow(SW_SHOW);
 | |
| 
 | |
|     SetListboxHeight(m_ComboBox.m_hWnd);
 | |
| }
 | |
| 
 | |
| void CDiskBox::SetListboxHeight(HWND hWnd)
 | |
| {   
 | |
|     RECT   rc;   
 | |
| 
 | |
|     ::SendMessage(hWnd, LB_GETITEMRECT, 0, (LPARAM)&rc);   
 | |
|     ::GetClientRect(hWnd, &rc);   
 | |
|     int   cyClient= rc.bottom - rc.top;   
 | |
| 
 | |
|     ::GetWindowRect(hWnd, &rc);   
 | |
|     int   cxListbox = rc.right - rc.left;   
 | |
|     int   cyListbox = rc.bottom - rc.top;   
 | |
| 
 | |
|     if (g_nDisks + g_nCdroms > 8) {
 | |
|         cyListbox = 18*8;
 | |
|     } else if (g_nDisks + g_nCdroms > 4) {
 | |
|         cyListbox = max(80, 18 * (g_nDisks + g_nCdroms));
 | |
|     } else {
 | |
|         cyListbox = 80;
 | |
|     }
 | |
|     ::SetWindowPos(hWnd, NULL, 0, 0,     
 | |
|                    cxListbox, cyListbox,
 | |
|                    SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOCOPYBITS|
 | |
|                    SWP_NOOWNERZORDER|SWP_NOZORDER
 | |
|         );
 | |
| }
 | |
| 
 | |
| int CDiskBox::AssemblingTitle()
 | |
| {
 | |
|     //
 | |
| 	// The group box title needs to be erased, but I need to keep
 | |
|     // the border away from the check box text. I create a string
 | |
|     // of spaces (' ') that is the same length as the title was
 | |
|     // plus the size of the checkbox. plus a little more.
 | |
|     //
 | |
| 
 | |
| 	CString	strOldTitle, strNewTitle;
 | |
| 	GetWindowText(strOldTitle);
 | |
| 
 | |
| 	CClientDC dc(this);
 | |
| 	CFont*	  pOldFont = dc.SelectObject(GetFont());
 | |
| 
 | |
| 	CSize	czText	= dc.GetTextExtent(strOldTitle);
 | |
| 	int		nRet	= czText.cx;
 | |
| 	int		nTarget = czText.cx + m_nSize;
 | |
| 	
 | |
| 	while(czText.cx < nTarget)
 | |
| 	{
 | |
| 		strNewTitle.Insert(0, ' ');
 | |
| 		czText = dc.GetTextExtent(strNewTitle);
 | |
| 	}
 | |
| 
 | |
| 	dc.SelectObject(pOldFont);
 | |
| 
 | |
| 	SetWindowText(strNewTitle);
 | |
| 	return nRet;
 | |
| }
 | |
| 
 | |
| void CDiskBox::OnSetFocus(CWnd* pOldWnd) 
 | |
| {
 | |
| 	CButton::OnSetFocus(pOldWnd);
 | |
| 	m_ComboBox.SetFocus();
 | |
| }
 |