| 1778 | } |
| 1779 | |
| 1780 | DLGTEMPLATE *LoadThemedDialogTemplate ( LPCTSTR lpDialogTemplateID, HINSTANCE hInstance ) |
| 1781 | { |
| 1782 | HRSRC hRsrc; |
| 1783 | HGLOBAL hRsrcMem; |
| 1784 | DLGTEMPLATE *pRsrcMem; |
| 1785 | DLGTEMPLATE *pTemplate; |
| 1786 | UINT dwTemplateSize = 0; |
| 1787 | WCHAR wchFaceName[LF_FACESIZE]; |
| 1788 | WORD wFontSize; |
| 1789 | BOOL bDialogEx; |
| 1790 | BOOL bHasFont; |
| 1791 | int cbFontAttr; |
| 1792 | int cbNew; |
| 1793 | int cbOld; |
| 1794 | BYTE *pbNew; |
| 1795 | BYTE *pb; |
| 1796 | BYTE *pOldControls; |
| 1797 | BYTE *pNewControls; |
| 1798 | WORD nCtrl; |
| 1799 | hRsrc = FindResource ( hInstance, lpDialogTemplateID, RT_DIALOG ); |
| 1800 | if ( hRsrc == NULL ) { |
| 1801 | return ( NULL ); |
| 1802 | } |
| 1803 | hRsrcMem = LoadResource ( hInstance, hRsrc ); |
| 1804 | pRsrcMem = ( DLGTEMPLATE * ) LockResource ( hRsrcMem ); |
| 1805 | dwTemplateSize = ( UINT ) SizeofResource ( hInstance, hRsrc ); |
| 1806 | if ( ( dwTemplateSize == 0 ) || |
| 1807 | ( pTemplate = LocalAlloc ( LPTR, dwTemplateSize + LF_FACESIZE * 2 ) ) == NULL ) { |
| 1808 | UnlockResource ( hRsrcMem ); |
| 1809 | FreeResource ( hRsrcMem ); |
| 1810 | return ( NULL ); |
| 1811 | } |
| 1812 | CopyMemory ( ( BYTE * ) pTemplate, pRsrcMem, ( size_t ) dwTemplateSize ); |
| 1813 | UnlockResource ( hRsrcMem ); |
| 1814 | FreeResource ( hRsrcMem ); |
| 1815 | if ( !GetThemedDialogFont ( wchFaceName, &wFontSize ) ) { |
| 1816 | return ( pTemplate ); |
| 1817 | } |
| 1818 | bDialogEx = DialogTemplate_IsDialogEx ( pTemplate ); |
| 1819 | bHasFont = DialogTemplate_HasFont ( pTemplate ); |
| 1820 | cbFontAttr = DialogTemplate_FontAttrSize ( bDialogEx ); |
| 1821 | if ( bDialogEx ) { |
| 1822 | ( ( DLGTEMPLATEEX * ) pTemplate )->style |= DS_SHELLFONT; |
| 1823 | } else { |
| 1824 | pTemplate->style |= DS_SHELLFONT; |
| 1825 | } |
| 1826 | cbNew = cbFontAttr + ( ( lstrlen ( wchFaceName ) + 1 ) * sizeof ( WCHAR ) ); |
| 1827 | pbNew = ( BYTE * ) wchFaceName; |
| 1828 | pb = DialogTemplate_GetFontSizeField ( pTemplate ); |
| 1829 | cbOld = ( int ) ( bHasFont ? cbFontAttr + 2 * ( lstrlen ( ( WCHAR * ) ( pb + cbFontAttr ) ) + 1 ) : 0 ); |
| 1830 | pOldControls = ( BYTE * ) ( ( ( DWORD_PTR ) pb + cbOld + 3 ) & ~ ( DWORD_PTR ) 3 ); |
| 1831 | pNewControls = ( BYTE * ) ( ( ( DWORD_PTR ) pb + cbNew + 3 ) & ~ ( DWORD_PTR ) 3 ); |
| 1832 | nCtrl = bDialogEx ? |
| 1833 | ( WORD ) ( ( DLGTEMPLATEEX * ) pTemplate )->cDlgItems : |
| 1834 | ( WORD ) pTemplate->cdit; |
| 1835 | if ( cbNew != cbOld && nCtrl > 0 ) { |
| 1836 | MoveMemory ( pNewControls, pOldControls, ( size_t ) ( dwTemplateSize - ( pOldControls - ( BYTE * ) pTemplate ) ) ); |
| 1837 | } |
no test coverage detected