我有一些定義的常量:
#define IDD_MAINDIALOG 101
#define IDC_EXIT 1001
#define IDC_START 1002
#define IDC_STOP 1003
#define IDC_STATE1 1004
#define IDC_STATE2 1005
#define IDC_STATE3 1006
#define IDC_STATE4 1007
#define IDC_STATE5 1008
#define IDC_FORCE1 1009
#define IDC_FORCE2 1010
....
意思Static Text是我程式中的相應單元格

我需要不斷更改這些單元格中的值。我想用SetDlgItemText. 但它需要int更改控制的值作為第二個引數。我試著這樣做:
sprintf(forceId, "IDC_FORCE%d", philNum 1);
sprintf(wisdomId, "IDC_WISDOM%d", philNum 1);
...
SetDlgItemText(hWnd, (int)forceId, force);
SetDlgItemText(hWnd, (int)wisdomId, wisdom);
但是,該方案無顯示,雖然跟蹤我發現,我已經(int)forceId和(int)wisdomId大約11793000,而不是1007或東西值。
那么,將定義的常量名稱轉換int為與其關聯的值的正確方法是什么?
我不想使用確切的控制元件名稱來避免復制代碼,因為我有很多單元格,而且我也明白在這種情況下可以使用數字 1001、1002...如果將進行一些更改(例如洗掉帶有 id 的單元格IDC_STATE3),則希望排除程式崩潰。
uj5u.com熱心網友回復:
看起來像你的forceId和wisdomId是char*,所以你正在使用這些字串的地址。
無論如何,您IDC_STATE1在運行時不會有值,它將是1004
對于這樣的事情,我會按照正確的順序手動排列 ID,并根據第一個 ID 進行計算:
SetDlgItemText(hWnd, IDC_FORCE1 philNum, force);
uj5u.com熱心網友回復:
您的常量名稱在運行時不存在,它們僅對前處理器有意義。在運行時,只有它們的數字會存在。在您的代碼使用IDC_FORCE1等的任何地方,它們都將在編譯程序中替換為它們的實際數字。
SetDlgItemText()將父視窗和子控制元件 ID 作為輸入。您正在嘗試將格式化字串作為控制元件 ID 傳遞。那不管用。只需按原樣傳遞實際控制 ID 號,例如:
#define IDC_FORCE_BASE 1009
#define IDC_FORCE1 IDC_FORCE_BASE 0
#define IDC_FORCE2 IDC_FORCE_BASE 1
...
SetDlgItemText(hWnd, IDC_FORCE_BASE philNum, force);
做相同的IDC_STATE...,IDC_WISDOM...等等。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/372137.html
