aboutsummaryrefslogtreecommitdiff
path: root/src/samples
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-10-31 14:20:44 -0500
committerSean Hall <r.sean.hall@gmail.com>2021-11-01 16:34:09 -0500
commit7e60078d4a7fe748a39c135def9e84a2421ab474 (patch)
tree51dbe5067ca9596f99107719734c4946e4c080b4 /src/samples
parentc092722a147940532b08f62403e182ef279f2c74 (diff)
downloadwix-7e60078d4a7fe748a39c135def9e84a2421ab474.tar.gz
wix-7e60078d4a7fe748a39c135def9e84a2421ab474.tar.bz2
wix-7e60078d4a7fe748a39c135def9e84a2421ab474.zip
Avoid using control ids inside of thmutil.
Diffstat (limited to 'src/samples')
-rw-r--r--src/samples/thmviewer/display.cpp8
-rw-r--r--src/samples/thmviewer/precomp.h1
-rw-r--r--src/samples/thmviewer/thmviewer.cpp37
3 files changed, 30 insertions, 16 deletions
diff --git a/src/samples/thmviewer/display.cpp b/src/samples/thmviewer/display.cpp
index 9ef88018..f40b50b5 100644
--- a/src/samples/thmviewer/display.cpp
+++ b/src/samples/thmviewer/display.cpp
@@ -188,7 +188,7 @@ static DWORD WINAPI DisplayThreadProc(
188 THEME_CONTROL* pControl = pCurrentHandle->pTheme->rgControls + i; 188 THEME_CONTROL* pControl = pCurrentHandle->pTheme->rgControls + i;
189 if (!pControl->wPageId) 189 if (!pControl->wPageId)
190 { 190 {
191 ThemeShowControl(pCurrentHandle->pTheme, pControl->wId, nCmdShow); 191 ThemeShowControl(pControl, nCmdShow);
192 } 192 }
193 } 193 }
194 194
@@ -264,7 +264,7 @@ static LRESULT CALLBACK DisplayWndProc(
264 break; 264 break;
265 265
266 case WM_TIMER: 266 case WM_TIMER:
267 if (!lParam && SUCCEEDED(ThemeSetProgressControl(pHandleTheme->pTheme, wParam, dwProgress))) 267 if (!lParam && SUCCEEDED(ThemeSetProgressControl(reinterpret_cast<THEME_CONTROL*>(wParam), dwProgress)))
268 { 268 {
269 dwProgress += rand() % 10 + 1; 269 dwProgress += rand() % 10 + 1;
270 if (dwProgress > 100) 270 if (dwProgress > 100)
@@ -322,12 +322,12 @@ static BOOL DisplayOnThmLoadedControl(
322 // Pre-populate some control types with data. 322 // Pre-populate some control types with data.
323 if (THEME_CONTROL_TYPE_RICHEDIT == pControl->type) 323 if (THEME_CONTROL_TYPE_RICHEDIT == pControl->type)
324 { 324 {
325 hr = ThemeLoadRichEditFromResource(pTheme, pControl->wId, MAKEINTRESOURCEA(THMVWR_RES_RICHEDIT_FILE), ::GetModuleHandleW(NULL)); 325 hr = WnduLoadRichEditFromResource(pControl->hWnd, MAKEINTRESOURCEA(THMVWR_RES_RICHEDIT_FILE), ::GetModuleHandleW(NULL));
326 ExitOnFailure(hr, "Failed to load richedit text."); 326 ExitOnFailure(hr, "Failed to load richedit text.");
327 } 327 }
328 else if (THEME_CONTROL_TYPE_PROGRESSBAR == pControl->type) 328 else if (THEME_CONTROL_TYPE_PROGRESSBAR == pControl->type)
329 { 329 {
330 DWORD dwId = ::SetTimer(pTheme->hwndParent, pControl->wId, 500, NULL); 330 DWORD dwId = ::SetTimer(pTheme->hwndParent, reinterpret_cast<UINT_PTR>(pControl), 500, NULL);
331 dwId = dwId; // prevents warning in "ship" build. 331 dwId = dwId; // prevents warning in "ship" build.
332 Assert(dwId == pControl->wId); 332 Assert(dwId == pControl->wId);
333 } 333 }
diff --git a/src/samples/thmviewer/precomp.h b/src/samples/thmviewer/precomp.h
index f11d3534..762a0623 100644
--- a/src/samples/thmviewer/precomp.h
+++ b/src/samples/thmviewer/precomp.h
@@ -28,6 +28,7 @@
28#include "shelutil.h" 28#include "shelutil.h"
29#include "strutil.h" 29#include "strutil.h"
30#include "thmutil.h" 30#include "thmutil.h"
31#include "wndutil.h"
31 32
32#include "resource.h" 33#include "resource.h"
33 34
diff --git a/src/samples/thmviewer/thmviewer.cpp b/src/samples/thmviewer/thmviewer.cpp
index 94b1ef55..38f3c4dc 100644
--- a/src/samples/thmviewer/thmviewer.cpp
+++ b/src/samples/thmviewer/thmviewer.cpp
@@ -390,6 +390,12 @@ static void OnThemeLoadError(
390 LPWSTR* psczErrors = NULL; 390 LPWSTR* psczErrors = NULL;
391 UINT cErrors = 0; 391 UINT cErrors = 0;
392 TVINSERTSTRUCTW tvi = { }; 392 TVINSERTSTRUCTW tvi = { };
393 const THEME_CONTROL* pTreeControl = NULL;
394
395 if (!ThemeControlExistsById(pTheme, THMVWR_CONTROL_TREE, &pTreeControl))
396 {
397 ExitWithRootFailure(hr, E_INVALIDSTATE, "THMVWR_CONTROL_TREE control doesn't exist.");
398 }
393 399
394 // Add the application node. 400 // Add the application node.
395 tvi.hParent = NULL; 401 tvi.hParent = NULL;
@@ -397,7 +403,7 @@ static void OnThemeLoadError(
397 tvi.item.mask = TVIF_TEXT | TVIF_PARAM; 403 tvi.item.mask = TVIF_TEXT | TVIF_PARAM;
398 tvi.item.lParam = 0; 404 tvi.item.lParam = 0;
399 tvi.item.pszText = L"Failed to load theme."; 405 tvi.item.pszText = L"Failed to load theme.";
400 tvi.hParent = reinterpret_cast<HTREEITEM>(ThemeSendControlMessage(pTheme, THMVWR_CONTROL_TREE, TVM_INSERTITEMW, 0, reinterpret_cast<LPARAM>(&tvi))); 406 tvi.hParent = reinterpret_cast<HTREEITEM>(::SendMessage(pTreeControl->hWnd, TVM_INSERTITEMW, 0, reinterpret_cast<LPARAM>(&tvi)));
401 407
402 if (!vsczThemeLoadErrors) 408 if (!vsczThemeLoadErrors)
403 { 409 {
@@ -405,13 +411,13 @@ static void OnThemeLoadError(
405 ExitOnFailure(hr, "Failed to format error message."); 411 ExitOnFailure(hr, "Failed to format error message.");
406 412
407 tvi.item.pszText = sczMessage; 413 tvi.item.pszText = sczMessage;
408 ThemeSendControlMessage(pTheme, THMVWR_CONTROL_TREE, TVM_INSERTITEMW, 0, reinterpret_cast<LPARAM>(&tvi)); 414 ::SendMessage(pTreeControl->hWnd, TVM_INSERTITEMW, 0, reinterpret_cast<LPARAM>(&tvi));
409 415
410 hr = StrAllocFromError(&sczMessage, hrFailure, NULL); 416 hr = StrAllocFromError(&sczMessage, hrFailure, NULL);
411 ExitOnFailure(hr, "Failed to format error message text."); 417 ExitOnFailure(hr, "Failed to format error message text.");
412 418
413 tvi.item.pszText = sczMessage; 419 tvi.item.pszText = sczMessage;
414 ThemeSendControlMessage(pTheme, THMVWR_CONTROL_TREE, TVM_INSERTITEMW, 0, reinterpret_cast<LPARAM>(&tvi)); 420 ::SendMessage(pTreeControl->hWnd, TVM_INSERTITEMW, 0, reinterpret_cast<LPARAM>(&tvi));
415 } 421 }
416 else 422 else
417 { 423 {
@@ -421,11 +427,11 @@ static void OnThemeLoadError(
421 for (DWORD i = 0; i < cErrors; ++i) 427 for (DWORD i = 0; i < cErrors; ++i)
422 { 428 {
423 tvi.item.pszText = psczErrors[i]; 429 tvi.item.pszText = psczErrors[i];
424 ThemeSendControlMessage(pTheme, THMVWR_CONTROL_TREE, TVM_INSERTITEMW, 0, reinterpret_cast<LPARAM>(&tvi)); 430 ::SendMessage(pTreeControl->hWnd, TVM_INSERTITEMW, 0, reinterpret_cast<LPARAM>(&tvi));
425 } 431 }
426 } 432 }
427 433
428 ThemeSendControlMessage(pTheme, THMVWR_CONTROL_TREE, TVM_EXPAND, TVE_EXPAND, reinterpret_cast<LPARAM>(tvi.hParent)); 434 ::SendMessage(pTreeControl->hWnd, TVM_EXPAND, TVE_EXPAND, reinterpret_cast<LPARAM>(tvi.hParent));
429 435
430LExit: 436LExit:
431 ReleaseStr(sczMessage); 437 ReleaseStr(sczMessage);
@@ -439,6 +445,7 @@ static void OnNewTheme(
439 __in HANDLE_THEME* pHandle 445 __in HANDLE_THEME* pHandle
440 ) 446 )
441{ 447{
448 const THEME_CONTROL* pTreeControl = NULL;
442 HANDLE_THEME* pOldHandle = reinterpret_cast<HANDLE_THEME*>(::GetWindowLongPtrW(hWnd, GWLP_USERDATA)); 449 HANDLE_THEME* pOldHandle = reinterpret_cast<HANDLE_THEME*>(::GetWindowLongPtrW(hWnd, GWLP_USERDATA));
443 THEME* pNewTheme = pHandle->pTheme; 450 THEME* pNewTheme = pHandle->pTheme;
444 451
@@ -460,17 +467,23 @@ static void OnNewTheme(
460 467
461 ::SetWindowLongPtrW(hWnd, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(pHandle)); 468 ::SetWindowLongPtrW(hWnd, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(pHandle));
462 469
470 if (!ThemeControlExistsById(pTheme, THMVWR_CONTROL_TREE, &pTreeControl))
471 {
472 TraceError(E_INVALIDSTATE, "Tree control doesn't exist.");
473 return;
474 }
475
463 // Remember the currently selected item by name so we can try to automatically select it later. 476 // Remember the currently selected item by name so we can try to automatically select it later.
464 // Otherwise, the user would see their window destroyed after every save of their theme file and 477 // Otherwise, the user would see their window destroyed after every save of their theme file and
465 // have to click to get the window back. 478 // have to click to get the window back.
466 item.mask = TVIF_TEXT; 479 item.mask = TVIF_TEXT;
467 item.pszText = wzSelectedPage; 480 item.pszText = wzSelectedPage;
468 item.cchTextMax = countof(wzSelectedPage); 481 item.cchTextMax = countof(wzSelectedPage);
469 item.hItem = reinterpret_cast<HTREEITEM>(ThemeSendControlMessage(pTheme, THMVWR_CONTROL_TREE, TVM_GETNEXTITEM, TVGN_CARET, NULL)); 482 item.hItem = reinterpret_cast<HTREEITEM>(::SendMessage(pTreeControl->hWnd, TVM_GETNEXTITEM, TVGN_CARET, NULL));
470 ThemeSendControlMessage(pTheme, THMVWR_CONTROL_TREE, TVM_GETITEM, 0, reinterpret_cast<LPARAM>(&item)); 483 ::SendMessage(pTreeControl->hWnd, TVM_GETITEM, 0, reinterpret_cast<LPARAM>(&item));
471 484
472 // Remove the previous items in the tree. 485 // Remove the previous items in the tree.
473 ThemeSendControlMessage(pTheme, THMVWR_CONTROL_TREE, TVM_DELETEITEM, 0, reinterpret_cast<LPARAM>(TVI_ROOT)); 486 ::SendMessage(pTreeControl->hWnd, TVM_DELETEITEM, 0, reinterpret_cast<LPARAM>(TVI_ROOT));
474 487
475 // Add the application node. 488 // Add the application node.
476 tvi.hParent = NULL; 489 tvi.hParent = NULL;
@@ -480,7 +493,7 @@ static void OnNewTheme(
480 tvi.item.pszText = pHandle && pHandle->pTheme && pHandle->pTheme->sczCaption ? pHandle->pTheme->sczCaption : L"Window"; 493 tvi.item.pszText = pHandle && pHandle->pTheme && pHandle->pTheme->sczCaption ? pHandle->pTheme->sczCaption : L"Window";
481 494
482 // Add the pages. 495 // Add the pages.
483 tvi.hParent = reinterpret_cast<HTREEITEM>(ThemeSendControlMessage(pTheme, THMVWR_CONTROL_TREE, TVM_INSERTITEMW, 0, reinterpret_cast<LPARAM>(&tvi))); 496 tvi.hParent = reinterpret_cast<HTREEITEM>(::SendMessage(pTreeControl->hWnd, TVM_INSERTITEMW, 0, reinterpret_cast<LPARAM>(&tvi)));
484 tvi.hInsertAfter = TVI_SORT; 497 tvi.hInsertAfter = TVI_SORT;
485 for (DWORD i = 0; i < pNewTheme->cPages; ++i) 498 for (DWORD i = 0; i < pNewTheme->cPages; ++i)
486 { 499 {
@@ -490,7 +503,7 @@ static void OnNewTheme(
490 tvi.item.pszText = pPage->sczName; 503 tvi.item.pszText = pPage->sczName;
491 tvi.item.lParam = i + 1; //prgdwPageIds[i]; - TODO: do the right thing here by calling ThemeGetPageIds(), should not assume we know how the page ids will be calculated. 504 tvi.item.lParam = i + 1; //prgdwPageIds[i]; - TODO: do the right thing here by calling ThemeGetPageIds(), should not assume we know how the page ids will be calculated.
492 505
493 HTREEITEM hti = reinterpret_cast<HTREEITEM>(ThemeSendControlMessage(pTheme, THMVWR_CONTROL_TREE, TVM_INSERTITEMW, 0, reinterpret_cast<LPARAM>(&tvi))); 506 HTREEITEM hti = reinterpret_cast<HTREEITEM>(::SendMessage(pTreeControl->hWnd, TVM_INSERTITEMW, 0, reinterpret_cast<LPARAM>(&tvi)));
494 if (*wzSelectedPage && CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, pPage->sczName, -1, wzSelectedPage, -1)) 507 if (*wzSelectedPage && CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, pPage->sczName, -1, wzSelectedPage, -1))
495 { 508 {
496 htiSelected = hti; 509 htiSelected = hti;
@@ -503,10 +516,10 @@ static void OnNewTheme(
503 htiSelected = tvi.hParent; 516 htiSelected = tvi.hParent;
504 } 517 }
505 518
506 ThemeSendControlMessage(pTheme, THMVWR_CONTROL_TREE, TVM_EXPAND, TVE_EXPAND, reinterpret_cast<LPARAM>(tvi.hParent)); 519 ::SendMessage(pTreeControl->hWnd, TVM_EXPAND, TVE_EXPAND, reinterpret_cast<LPARAM>(tvi.hParent));
507 if (htiSelected) 520 if (htiSelected)
508 { 521 {
509 ThemeSendControlMessage(pTheme, THMVWR_CONTROL_TREE, TVM_SELECTITEM, TVGN_CARET, reinterpret_cast<LPARAM>(htiSelected)); 522 ::SendMessage(pTreeControl->hWnd, TVM_SELECTITEM, TVGN_CARET, reinterpret_cast<LPARAM>(htiSelected));
510 } 523 }
511} 524}
512 525