tara lara Ответов: 1

Как установить и отключить флажки в C++?


Привет. Я хотел создать графическую программу в качестве личного проекта на C++ с помощью visual studio. Вот что делает программа: Допустим, вы запускаете программу в 5:37 вечера. Программа поставит галочку в окошке с надписью "Вы находитесь в пятом часу". Это происходит потому, что час дня, в который вы решили запустить программу, находится в 5-м часу. Если вы запустите программу в 11:23 утра, программа установит флажок с надписью "Вы находитесь в часе 11". Это происходит потому, что час дня, в который вы решите запустить программу, находится в 11-м часу. Кроме того, метка в верхней части окна будет показывать текущее местное время.

For this to work, I know need to make 12 check boxes for each hour of the day. I also need to disable the check boxes so that the user can not effect the check boxes. Next, the computer needs to check off the box based off of the local time. Lastly, I want a button that will refresh the check boxes based off of the new time and refreshes the label that shows the current local time(ex: If the user opens the app at 8:00pm the check box that says "you are in hour 8" will be checked off. If the user leaves the GUI program on for an hour, the refresh button should check off "you are in hour 9" because by then it will be 9:00pm. Then it should change the label to the new local time). I don't know some of the syntax in C++ to do this. Thank you in advance to anyone who can help me.

Что я уже пробовал:

public:
		MyForm(void)
		{
			InitializeComponent();

			//Shows current time in label 2
			DateTime datetime = DateTime::Now;
			this->label2->Text = datetime.ToString("hh:mm");

			checkBox1->Enabled = false; //disables checkbox for hour 1
			checkBox2->Enabled = false; //disables checkbox for hour 2
			checkBox3->Enabled = false; //disables checkbox for hour 3
			checkBox4->Enabled = false; //disables checkbox for hour 4
			checkBox5->Enabled = false; //disables checkbox for hour 5
			checkBox6->Enabled = false; //disables checkbox for hour 6
			checkBox7->Enabled = false; //disables checkbox for hour 7							
			checkBox8->Enabled = false; //disables checkbox for hour 8
			checkBox9->Enabled = false; //disables checkbox for hour 9
			checkBox10->Enabled = false; //disables checkbox for hour 10
            checkBox11->Enabled = false;//disables checkbox for hour 11
            checkBox12->Enabled = false; //disables checkbox for hour 12
			//
			//TODO: Add the constructor code here
			//
		}
________________________________________________________________________________
/*Here is what I have done for hour 1. If I can get this to work then I can do the same for the other check boxes.*/

private: System::Void checkBox1_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {
	//Controls time for binary clock
	time_t currentTime;
	struct tm* localTime;

	time(¤tTime);                   // Get the current time
	localTime = localtime(¤tTime);  // Convert the current time to the local time

	int Hour = localTime->tm_hour % 12; //Must mod time by 12 to get standard time

	if (Hour = 1) {

		checkBox1->Checked = true; //checks off box
	}
}
_____________________________________________________________________________
/*This part of the code is for the refresh button. Right now, all it does is updates
the current time in label 2 but does not update the check boxes to reflect the time*/

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
	DateTime datetime = DateTime::Now;
	this->label2->Text = datetime.ToString("hh:mm");
}

Rick York

На мой взгляд, для этого было бы проще использовать контрольный список. Тогда у вас будет только один элемент управления вместо двенадцати.

tara lara

Хорошо. Думаю, это единственное, что я могу исправить. Смогу ли я по-прежнему редактировать кнопки по отдельности, даже если они находятся в списке (а не отдельно)?

Richard MacCutchan

5:37 вечера-это час 17, а не 5.

Rick York

Да, вы можете установить отдельные флажки, если хотите. Есть также функции, чтобы проверить их все и снять их все.

tara lara

Я хотел использовать стандартное время, поэтому я сделал "int Hour = localTime->tm_hour % 12". Я думаю, что в военное время это был бы час 17 на самом деле.

tara lara

Вы знаете, что это за функция и как ее использовать для кнопок? Я не обязательно хочу, чтобы все кнопки были отключены, но я хочу написать "если-заявление", которое будет отключено в соответствии с местным временем.

Richard MacCutchan

На самом деле использование 24-часовых часов является стандартным везде в наши дни; за исключением США, которые придерживаются старомодной системы AM/PM.

tara lara

Это правда. Большинство стран мира не используют систему AM/PM.

1 Ответов

Рейтинг:
10

Rick York

Чтобы включить или отключить кнопку, Вы можете вызвать EnableWindow.

Чтобы установить флажок, вы можете вызвать SetCheck( BST_CHECKED );

Чтобы установить флажок в контрольном списке, вы можете вызвать SetCheck();