[Setup]/[Additional settings]ダイアログでメモリリークが発生することがあったので修正
- プロパティーシートページは表示しない(タブを選択しない)とページが生成されないようだ
- 必ず呼び出される PROPSHEETPAGE.pfnCallback を使って後処理を行うよう修正
@@ -279,12 +279,6 @@ | ||
279 | 279 | } |
280 | 280 | break; |
281 | 281 | } |
282 | - case WM_DESTROY: { | |
283 | - free(DlgData->dlg_templ); | |
284 | - free(DlgData); | |
285 | - SetWindowLongPtr(hWnd, DWLP_USER, NULL); | |
286 | - break; | |
287 | - } | |
288 | 282 | default: |
289 | 283 | return FALSE; |
290 | 284 | } |
@@ -291,6 +285,26 @@ | ||
291 | 285 | return FALSE; |
292 | 286 | } |
293 | 287 | |
288 | +static UINT CallBack(HWND hwnd, UINT uMsg, struct _PROPSHEETPAGEW *ppsp) | |
289 | +{ | |
290 | + (void)hwnd; | |
291 | + UINT ret_val = 0; | |
292 | + switch (uMsg) { | |
293 | + case PSPCB_CREATE: | |
294 | + ret_val = 1; | |
295 | + break; | |
296 | + case PSPCB_RELEASE: | |
297 | + free((void *)ppsp->pResource); | |
298 | + ppsp->pResource = NULL; | |
299 | + free((void *)ppsp->lParam); | |
300 | + ppsp->lParam = NULL; | |
301 | + break; | |
302 | + default: | |
303 | + break; | |
304 | + } | |
305 | + return ret_val; | |
306 | +} | |
307 | + | |
294 | 308 | HPROPSHEETPAGE CodingPageCreate(HINSTANCE inst, TTTSet *pts) |
295 | 309 | { |
296 | 310 | // 注 common/tt_res.h と coding_pp_res.h で値を一致させること |
@@ -302,8 +316,10 @@ | ||
302 | 316 | |
303 | 317 | PROPSHEETPAGEW_V1 psp = {}; |
304 | 318 | psp.dwSize = sizeof(psp); |
305 | - psp.dwFlags = PSP_DEFAULT; | |
319 | + psp.dwFlags = PSP_DEFAULT | PSP_USECALLBACK | PSP_USETITLE | PSP_HASHELP; | |
306 | 320 | psp.hInstance = inst; |
321 | + psp.pfnCallback = CallBack; | |
322 | + psp.pszTitle = L"coding"; // TODO lng ファイルに入れる | |
307 | 323 | psp.pszTemplate = MAKEINTRESOURCEW(id); |
308 | 324 | #if defined(REWRITE_TEMPLATE) |
309 | 325 | psp.dwFlags |= PSP_DLGINDIRECT; |
@@ -310,8 +326,6 @@ | ||
310 | 326 | Param->dlg_templ = TTGetDlgTemplate(inst, MAKEINTRESOURCEA(id)); |
311 | 327 | psp.pResource = Param->dlg_templ; |
312 | 328 | #endif |
313 | - psp.pszTitle = L"coding"; // TODO lng ファイルに入れる | |
314 | - psp.dwFlags |= (PSP_USETITLE | PSP_HASHELP); | |
315 | 329 | |
316 | 330 | psp.pfnDlgProc = Proc; |
317 | 331 | psp.lParam = (LPARAM)Param; |
@@ -252,12 +252,6 @@ | ||
252 | 252 | } |
253 | 253 | break; |
254 | 254 | } |
255 | - case WM_DESTROY: { | |
256 | - free(dlg_data->dlg_templ); | |
257 | - free(dlg_data); | |
258 | - SetWindowLongPtr(hWnd, DWLP_USER, NULL); | |
259 | - break; | |
260 | - } | |
261 | 255 | default: |
262 | 256 | return FALSE; |
263 | 257 | } |
@@ -264,6 +258,26 @@ | ||
264 | 258 | return FALSE; |
265 | 259 | } |
266 | 260 | |
261 | +static UINT CallBack(HWND hwnd, UINT uMsg, struct _PROPSHEETPAGEW *ppsp) | |
262 | +{ | |
263 | + (void)hwnd; | |
264 | + UINT ret_val = 0; | |
265 | + switch (uMsg) { | |
266 | + case PSPCB_CREATE: | |
267 | + ret_val = 1; | |
268 | + break; | |
269 | + case PSPCB_RELEASE: | |
270 | + free((void *)ppsp->pResource); | |
271 | + ppsp->pResource = NULL; | |
272 | + free((void *)ppsp->lParam); | |
273 | + ppsp->lParam = NULL; | |
274 | + break; | |
275 | + default: | |
276 | + break; | |
277 | + } | |
278 | + return ret_val; | |
279 | +} | |
280 | + | |
267 | 281 | HPROPSHEETPAGE FontPageCreate(HINSTANCE inst, TTTSet *pts) |
268 | 282 | { |
269 | 283 | // 注 common/tt_res.h と font_pp_res.h で値を一致させること |
@@ -276,8 +290,10 @@ | ||
276 | 290 | |
277 | 291 | PROPSHEETPAGEW_V1 psp = {}; |
278 | 292 | psp.dwSize = sizeof(psp); |
279 | - psp.dwFlags = PSP_DEFAULT; | |
293 | + psp.dwFlags = PSP_DEFAULT | PSP_USECALLBACK | PSP_USETITLE /*| PSP_HASHELP */; | |
280 | 294 | psp.hInstance = inst; |
295 | + psp.pfnCallback = CallBack; | |
296 | + psp.pszTitle = L"font"; // TODO lng ファイルに入れる | |
281 | 297 | psp.pszTemplate = MAKEINTRESOURCEW(id); |
282 | 298 | #if defined(REWRITE_TEMPLATE) |
283 | 299 | psp.dwFlags |= PSP_DLGINDIRECT; |
@@ -284,8 +300,6 @@ | ||
284 | 300 | Param->dlg_templ = TTGetDlgTemplate(inst, MAKEINTRESOURCEA(id)); |
285 | 301 | psp.pResource = Param->dlg_templ; |
286 | 302 | #endif |
287 | - psp.pszTitle = L"font"; | |
288 | - psp.dwFlags |= (PSP_USETITLE /*| PSP_HASHELP */); | |
289 | 303 | |
290 | 304 | psp.pfnDlgProc = Proc; |
291 | 305 | psp.lParam = (LPARAM)Param; |