LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
static int N;
static HWND hEdit, hButton;
char szBuffer[10];
// ...
case WM_COMMAND:
switch (LOWORD(wParam)) {
case 1:
GetDlgItemText(hwnd, ID_EDIT, szBuffer, TRUE); // 錯誤用法
N = atof(szBuffer);
break;
}
}
GetDlgItemText 第 4 參數是 int nMaxCount,傳入 TRUE(即 1)導致只讀取 1 字符,緩衝區實際為空,atof 返回 0。
GetDlgItemText(hwnd, ID_EDIT, szBuffer, sizeof(szBuffer)); // 或 10
N = atoi(szBuffer); // 整數用 atoi,浮點用 atof
更推薦 MFC 封裝的 CWnd::GetDlgItemInt,自動處理空格、非數字截斷,參見 MSDN 文檔。
回調函數中的 static 變量生命周期贯穿進程,跨消息調用保持值不變,這部分用法正確;關鍵是正確讀取編輯框內容。