通用网络游戏开发框架
源代码在线查看: control.cpp
// ============================================================================
// Control implementation
//
// (c) 2003 Ken Reed
//
// This is free software. You can redistribute it and/or modify it under the
// terms of the GNU General Public License version 2 as published by the Free
// Software Foundation.
// ============================================================================
#include "stdafx.h"
#include "control.h"
#include "exception.h"
#include
#include
using namespace std;
namespace {
vector controls;
}
// ============================================================================
// Construction
// ============================================================================
Control::Control(const int control_id)
{
id = control_id;
controls.push_back(this);
}
// ============================================================================
// Register controls
// ============================================================================
void register_controls(HWND dialog_window)
{
vector::iterator p;
for (p = controls.begin(); p != controls.end(); p++) {
(*p)->dialog = dialog_window;
(*p)->handle = GetDlgItem(dialog_window, (*p)->id);
if ((*p)->handle == 0) {
Win_exception e("Could not obtain control handle");
RAISE(e);
}
}
}
// ============================================================================
// Get check button state
// ============================================================================
bool Control::get_state()
{
int state = IsDlgButtonChecked(dialog, id);
if (state == BST_CHECKED) {
return true;
}
return false;
}
// ============================================================================
// Set enabled state
// ============================================================================
void Control::enable(bool state)
{
EnableWindow(handle, state);
}
// ============================================================================
// Set checked state
// ============================================================================
void Control::checked(bool set_tick)
{
if (set_tick) {
SendMessage(handle, BM_SETCHECK, BST_CHECKED, 0);
}
else {
SendMessage(handle, BM_SETCHECK, BST_UNCHECKED, 0);
}
}
// ============================================================================
// Set range
// ============================================================================
void Control::set_range(int low, int high)
{
SendMessage(handle, UDM_SETRANGE, 0, MAKELONG(high, low));
}
// ============================================================================
// Set value
// ============================================================================
void Control::set_value(int value)
{
SendMessage(handle, UDM_SETPOS, 0, MAKELONG(value, 0));
}
// ============================================================================
// Get value
// ============================================================================
int Control::get_value()
{
return (int) SendMessage(handle, UDM_GETPOS, 0, 0);
}
// ============================================================================
// Convert to HWND
// ============================================================================
Control::operator HWND() const
{
return handle;
}