示例#1
0
void
ish3_ProgressBar::add_control(Rollout *ro, HWND parent, HINSTANCE hInstance, int& current_y)
{
   caption = caption->eval();

   const TCHAR*   text = caption->eval()->to_string();

   // We'll hang onto these...
   parent_rollout = ro;
   control_ID = next_id();

   // Load in some values from the user, if they were given...
   Value* Vtmp = control_param(value);
   if(Vtmp==&unsupplied) value = 0;
   else
      value = Vtmp->to_int();

   // Check orientation parameter
   type = TYPE_HORIZ;
   Value* Ttmp = control_param(orient);
   if(Ttmp!=&unsupplied&&Ttmp==n_vertical) type = TYPE_VERT;

   // Get the colour of the progress slider
   Value* Ctmp = control_param(color);
   if(Ctmp==&unsupplied) colorPro = RGB(30,10,190);
   else
      colorPro = convertFrom(Ctmp->to_acolor());

   // Pass the inpho back to MXS to 
   // let it calculate final position
   layout_data pos;
   compute_layout(ro, &pos, current_y);

   progbar = CreateWindow(
                     PBAR_WINDOWCLASS,
                     text,
                     WS_VISIBLE | WS_CHILD | WS_GROUP,
                     pos.left, pos.top, pos.width, pos.height,    
                     parent, (HMENU)control_ID, g_hInst, this);
   DWORD err = GetLastError();

}
示例#2
0
void
AngleControl::compute_layout(Rollout *ro, layout_data* pos, int& current_y)
{
   setup_layout(ro, pos, current_y);

   const TCHAR*   label_text = caption->eval()->to_string();
   int label_height = (_tcslen(label_text) != 0) ? ro->text_height + SPACING_BEFORE - 2 : 0;

   Value *val;
   if((val = control_param(diameter)) != &unsupplied)
      m_diameter = val->to_int();
   else if((val = control_param(width)) != &unsupplied)
      m_diameter = val->to_int();
   else if((val = control_param(height)) != &unsupplied)
      m_diameter = val->to_int();
   else
      m_diameter = 64;

   pos->width  = m_diameter;
   process_layout_params(ro, pos, current_y);
   pos->height = label_height + m_diameter;
   current_y = pos->top + pos->height;

}
示例#3
0
void
FooControl::add_control(Rollout *ro, HWND parent, HINSTANCE hInstance, int& current_y)
{
	HWND	label, edit_box, spinner;
	int		left, top, width, height;
	SIZE	size;
	const TCHAR*	text = caption->eval()->to_string();	

	/* add 3 controls for a spinner: the label static, value custeditbox, & spinner itself,
	 * label & edit box are given IDs that are the spinner id * control_count & that + 1, to make
	 * sure they are unique and decodable */

	parent_rollout = ro;
	control_ID = next_id();
	WORD label_id = next_id();
	WORD edit_box_id = next_id();	

	// compute bounding box, apply layout params
	layout_data pos;
	setup_layout(ro, &pos, current_y);
	Value* fw = control_param(fieldwidth);
	int spin_width = (fw == &unsupplied) ? ro->current_width / 2 : fw->to_int() + 10;
	GetTextExtentPoint32(ro->rollout_dc, text, static_cast<int>(_tcslen(text)), &size); 	
	int lbl_width = size.cx;
	int orig_width = lbl_width + spin_width;

	pos.width = orig_width + 2;
	pos.left = pos.left + ro->current_width - pos.width; 
	pos.height = ro->text_height + 3;
	process_layout_params(ro, &pos, current_y);

	// place spinner elements
	int cex = (fw == &unsupplied) ? pos.width * lbl_width / orig_width : pos.width - spin_width;
	cex = min(cex, pos.width);
	width = lbl_width; height = ro->text_height;
	left = pos.left + cex - width - 1; top = pos.top; 
	label = CreateWindow(_T("STATIC"),
							text,
							WS_VISIBLE | WS_CHILD | WS_GROUP,
							left, top, width, height,    
							parent, (HMENU)label_id, hInstance, NULL);

	width = pos.width - cex - 13; height = ro->text_height + 3;
	left = pos.left + cex + 1; 
	edit_box = CreateWindowEx(0,
							CUSTEDITWINDOWCLASS,
							_T(""),
							WS_VISIBLE | WS_CHILD | WS_TABSTOP | WS_GROUP,
							left, top, width, height,    
							parent, (HMENU)edit_box_id, hInstance, NULL);

	left += width; width = 10; 
	spinner = CreateWindowEx(0,
							SPINNERWINDOWCLASS,
							_T(""),
							WS_VISIBLE | WS_CHILD,
							left, top, width, height,    
							parent, (HMENU)control_ID, hInstance, NULL);

    SendDlgItemMessage(parent, label_id, WM_SETFONT, (WPARAM)ro->font, 0L);
    SendDlgItemMessage(parent, edit_box_id, WM_SETFONT, (WPARAM)ro->font, 0L);

	/* setup the spinner control */

	ISpinnerControl* spin = GetISpinner(spinner);
	Value*			 range = control_param(range);
	Value*			 type = control_param(type);
	Value*			 scaleval = control_param(scale);

	if (type == n_integer)
		spin_type = EDITTYPE_INT;
	else if (type == n_worldUnits)
		spin_type = EDITTYPE_UNIVERSE;
	else if (type == n_float || type == &unsupplied)
		spin_type = EDITTYPE_FLOAT;
	else
		throw TypeError (MaxSDK::GetResourceStringAsMSTR(IDS_SPINNER_TYPE_MUST_BE_INTEGER_OR_FLOAT), type);
	
	if (ro->init_values)
	{
		if (range == &unsupplied)
		{
			min = 0.0f; max = 100.0f; value = 0.0f;
		}
		else if (is_point3(range))
		{
			Point3 p = range->to_point3();
			min = p.x; max = p.y; value = p.z;
		}
		else
			throw TypeError (MaxSDK::GetResourceStringAsMSTR(IDS_SPINNER_RANGE_MUST_BE_A_VECTOR), range);

		if (scaleval == &unsupplied)
		{
				scale = (spin_type == EDITTYPE_INT) ? 1.0f : 0.1f;
		}
		else
			scale = scaleval->to_float();
	}
	
    spin->LinkToEdit(edit_box, spin_type);
	spin->SetScale(scale);
    if (spin_type == EDITTYPE_INT)
	{
		spin->SetLimits((int)min, (int)max, FALSE);
		spin->SetValue((int)value, FALSE);
	}
	else if (spin_type == EDITTYPE_UNIVERSE)
	{
		spin->SetLimits(min, max, FALSE);
		spin->SetValue(value, FALSE);
	}
	else
	{
		spin->SetLimits(min, max, FALSE);
		spin->SetValue(value, FALSE);
	}
	ReleaseISpinner(spin);
}
示例#4
0
void AngleControl::add_control(Rollout *ro, HWND parent, HINSTANCE hInstance, int& current_y)
{
   caption = caption->eval();

   HWND  label;
   int      left, top, width, height;
   SIZE  size;
   const TCHAR *label_text = caption->eval()->to_string();

   parent_rollout = ro;
   control_ID = next_id();
   WORD label_id = next_id();

   Value *val;
   if((val = control_param(diameter)) != &unsupplied)
      m_diameter = val->to_int();
   else if((val = control_param(width)) != &unsupplied)
      m_diameter = val->to_int();
   else if((val = control_param(height)) != &unsupplied)
      m_diameter = val->to_int();
   else
      m_diameter = 64;

   val = control_param(degrees);
   if(val != &unsupplied)
      m_degrees = val->to_float();
   else
      m_degrees = 0.f;

   val = control_param(radians);
   if(val != &unsupplied)
      m_degrees = RadToDeg(val->to_float());

   val = control_param(range);
   if (val == &unsupplied)
   {
      m_min = -360.0f; m_max = 360.0f;
   }
   else if (is_point3(val))
   {
      Point3 p = val->to_point3();
      m_min = p.x; m_max = p.y; m_degrees = p.z;
   }
   else
      throw TypeError (MaxSDK::GetResourceStringAsMSTR(IDS_ANGLE_RANGE_MUST_BE_A_VECTOR), val);

   val = control_param(startDegrees);
   if(val != &unsupplied)
      SetStartDegrees(val->to_float());
   else
      SetStartDegrees(0.f);

   val = control_param(startRadians);
   if(val != &unsupplied)
      SetStartDegrees(RadToDeg(val->to_float()));

   val = control_param(dir);
   if(val != &unsupplied)
   {
      if (val != n_CW && val != n_CCW)
         throw RuntimeError (MaxSDK::GetResourceStringAsMSTR(IDS_ANGLE_DIR_BAD_VALUE), val);
      m_dirCCW = val != n_CW;
   }

   val = control_param(bitmap);
   if(val != &unsupplied)
      SetBitmap(val);
   else
      SetColor(control_param(color));

   m_lButtonDown = FALSE;

   layout_data pos;
   compute_layout(ro, &pos, current_y);
   left = pos.left; top = pos.top;

   // place optional label
   int label_height = (_tcslen(label_text) != 0) ? ro->text_height + SPACING_BEFORE - 2 : 0;
   // LAM - defect 298613 - not creating the caption HWND was causing problems (whole screen redrawn
   // when control moved, setting caption text set wrong HWND). Now always create.
// if (label_height != 0)
// {
      DLGetTextExtent(ro->rollout_dc, label_text, &size);   
      width = min(size.cx, pos.width); height = ro->text_height;
      label = CreateWindow(_T("STATIC"),
                        label_text,
                        WS_VISIBLE | WS_CHILD | WS_GROUP,
                        left, top, width, height,    
                        parent, (HMENU)label_id, hInstance, NULL);
// }

   // place angle box
   top = pos.top + label_height;
   width = pos.width;

   m_hWnd = CreateWindow(
      ANGLECTRL_WINDOWCLASS,
      TEXT(""),
      WS_VISIBLE | WS_CHILD | WS_GROUP,
      pos.left, top, width, m_diameter,    
      parent, (HMENU)control_ID, g_hInst, this);

   m_hToolTip = CreateWindow(
      TOOLTIPS_CLASS,
      TEXT(""), WS_POPUP,
      CW_USEDEFAULT, CW_USEDEFAULT,
      CW_USEDEFAULT, CW_USEDEFAULT,
      m_hWnd, (HMENU)NULL, g_hInst, NULL);

   SendMessage(label, WM_SETFONT, (WPARAM)ro->font, 0L);
   SendMessage(m_hToolTip, TTM_ADDTOOL, 0, (LPARAM)GetToolInfo());
}