允許的status
0x00
0x01
0x03
0x07
不允許的status (一定是由原先允許的status改變一個選項而來)
0x02
若是 0x00 -> 0x02 應自動變成 0x03
若是 0x03 -> 0x02 應自動變成 0x00
0x04
只可能0x00 -> 0x04,應自動變成 0x07
0x05
若是 0x01 -> 0x05,應自動變成 0x07
若是 0x07 -> 0x05,應自動變成 0x01
0x06
只可能 0x07 -> 0x06,應自動變成 0x00
因此當status為 0x02 或 0x05時,各有兩種可能
因此必須記錄先前的status,才能判斷應該進行的動作
※ 引述《steven0315 (小志)》之銘言:
: ( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
: ( 未必需要依照此格式,文章條理清楚即可 )
: 遇到的問題: (題意請描述清楚)
: 我設計三個可以勾選的匡匡..
: ○ IDC_LOCK1
: ○ IDC_LOCK2
: ○ IDC_LOCK3
: 用16進制設為0x01 0x02 0x04分別為第1~3個
: 當我勾選第3個時→1.2都要enable
: 當我勾選第2個時→1要enable
: 當1.2.3都勾時,我把第1勾勾disable→1.2.3都要自己disable掉
: 當1.2都勾時,我把第1勾勾disable→1.2都要自己disable掉
: 當1.2.3都勾時,我把第2勾勾disable→2.3都要自己disable掉
: 當1被勾時,我勾3→1.2.3都要enable
: 希望得到的正確結果:
: 程式跑出來的錯誤結果:
: 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
: 有問題的code: (請善用置底文標色功能)
: if(lock_status & 0x02)
: CheckDlgButton(hDlg, IDC_LOCK1,1);
: if(lock_status & 0x04)
: {
: CheckDlgButton(hDlg, IDC_LOCK1,1);
: CheckDlgButton(hDlg, IDC_LOCK2,1);
: }
: if(lock_status == 0x06)
: {
: CheckDlgButton(hDlg, IDC_LOCK1,0);
: CheckDlgButton(hDlg, IDC_LOCK2,0);
: CheckDlgButton(hDlg, IDC_LOCK3,0);
: }
: if(lock_status == 0x05)
: {
: CheckDlgButton(hDlg, IDC_LOCK2,0);
: CheckDlgButton(hDlg, IDC_LOCK3,0);
: }
: 補充說明:
: 簡單的說..就是勾後面的前面就要自動勾
: 前面被取消掉..後面也要自動取消
: 剛學win2000...還不是很熟~"~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.125.84