------------------------------------------------------------
                         [BUG/PRB.] VFP 9.0 FIX - FONT PROPERTY PAGE
                                 January 2026
                 ------------------------------------------------------------
                                     CCB



1. BUG:

     If the ActiveX control uses the stock Font property,
     usually we can open the Font Property Page to set the control's Font property,
     but sometimes we can not open the Font Property Page.

     There is the same problem for the Color Property Page and the Picture Property Page.


2. CAUSE:

     In Visual C++ 6.0 (Visual Studio 98), the MFC ActiveX control uses the class CFontPropPage to set the control's Font property,
     it needs the MFC library file mfc40.dll to run.

     In Visual C++ 7.0 (Visual Studio .NET) or later, the MFC ActiveX control uses the class StockFontPage to set the control's Font property,
     it needs the MFC library file mfc40.dll and the file msstkprp.dll to run.

     There is no the file msstkprp.dll in Visual C++ 7.0 (Visual Studio .NET) or later,
     so we need to copy the file msstkprp.dll from Visual C++ 6.0 (Visual Studio 98) to the Windows system folder,
     and run the command regsvr32 c:\windows\system32\msstkprp.dll to register it,
     and then we can use the class StockFontPage to set the control's Font property.

     There is no the file msstkprp.dll 64-bit version too.

     We can use the class CFontPropPage instead of the class StockFontPage to set the control's Font property,
     and use the class CColorPropPage instead of the class StockColorPage to set the control's Color property,
     and use the class CPicturePropPage instead of the class StockPicturePage to set the control's Picture property,
     so it does not need the file msstkprp.dll, it only needs the MFC library file mfc40.dll to run.


3. RESOLUTION:

     We can write some code to fix the BUG.
 
     vfpa_olecreatepropertyframeindirect :: ; proc near

     push ebp
     mov ebp,esp
     sub esp,04h
     ; push ebx
     push esi
     ; push edi

     mov esi,dword ptr [ebp+08h]
     test esi,esi
     je vfpa_olecreatepropertyframeindirect_end

     mov ecx,dword ptr [esi+1Ch]
     test ecx,ecx
     je vfpa_olecreatepropertyframeindirect_end

     mov eax,dword ptr [esi+20h]
     test eax,eax
     je vfpa_olecreatepropertyframeindirect_end

     vfpa_olecreatepropertyframeindirect_loop:

     vfpa_olecreatepropertyframeindirect_font_start:
     ; {7EBDAAE0-8120-11CF-899F-00AA00688B10}, StockFontPage ("MS Stock Font Property Page Object")
     ; {0BE35200-8F91-11CE-9DE3-00AA004BB851}, CFontPropPage ("Font Property Page")
     cmp dword ptr [eax],07EBDAAE0h
     jne vfpa_olecreatepropertyframeindirect_font_end
     cmp dword ptr [eax+04h],011CF8120h
     jne vfpa_olecreatepropertyframeindirect_font_end
     cmp dword ptr [eax+08h],0AA009F89h
     jne vfpa_olecreatepropertyframeindirect_font_end
     cmp dword ptr [eax+0Ch],0108B6800h
     jne vfpa_olecreatepropertyframeindirect_font_end
     mov dword ptr [eax],00BE35200h
     mov dword ptr [eax+04h],011CE8F91h
     mov dword ptr [eax+08h],0AA00E39Dh
     mov dword ptr [eax+0Ch],051B84B00h
     jmp vfpa_olecreatepropertyframeindirect_end0
     vfpa_olecreatepropertyframeindirect_font_end:

     vfpa_olecreatepropertyframeindirect_color_start:
     ; {7EBDAAE1-8120-11CF-899F-00AA00688B10}, StockColorPage ("MS Stock Color Property Page Object")
     ; {0BE35201-8F91-11CE-9DE3-00AA004BB851}, CColorPropPage ("Color Property Page")
     cmp dword ptr [eax],07EBDAAE1h
     jne vfpa_olecreatepropertyframeindirect_color_end
     cmp dword ptr [eax+04h],011CF8120h
     jne vfpa_olecreatepropertyframeindirect_color_end
     cmp dword ptr [eax+08h],0AA009F89h
     jne vfpa_olecreatepropertyframeindirect_color_end
     cmp dword ptr [eax+0Ch],0108B6800h
     jne vfpa_olecreatepropertyframeindirect_color_end
     mov dword ptr [eax],00BE35201h
     mov dword ptr [eax+04h],011CE8F91h
     mov dword ptr [eax+08h],0AA00E39Dh
     mov dword ptr [eax+0Ch],051B84B00h
     jmp vfpa_olecreatepropertyframeindirect_end0
     vfpa_olecreatepropertyframeindirect_color_end:

     vfpa_olecreatepropertyframeindirect_picture_start:
     ; {7EBDAAE2-8120-11CF-899F-00AA00688B10}, StockPicturePage ("MS Stock Picture Property Page Object")
     ; {0BE35202-8F91-11CE-9DE3-00AA004BB851}, CPicturePropPage ("Picture Property Page")
     cmp dword ptr [eax],07EBDAAE2h
     jne vfpa_olecreatepropertyframeindirect_picture_end
     cmp dword ptr [eax+04h],011CF8120h
     jne vfpa_olecreatepropertyframeindirect_picture_end
     cmp dword ptr [eax+08h],0AA009F89h
     jne vfpa_olecreatepropertyframeindirect_picture_end
     cmp dword ptr [eax+0Ch],0108B6800h
     jne vfpa_olecreatepropertyframeindirect_picture_end
     mov dword ptr [eax],00BE35202h
     mov dword ptr [eax+04h],011CE8F91h
     mov dword ptr [eax+08h],0AA00E39Dh
     mov dword ptr [eax+0Ch],051B84B00h
     jmp vfpa_olecreatepropertyframeindirect_end0
     vfpa_olecreatepropertyframeindirect_picture_end:

     vfpa_olecreatepropertyframeindirect_end0:
     add eax,10h
     dec ecx
     test ecx,ecx
     jne vfpa_olecreatepropertyframeindirect_loop

     vfpa_olecreatepropertyframeindirect_end:
     push esi
     call OleCreatePropertyFrameIndirect
     mov dword ptr [ebp-04h],eax

     ; pop edi
     pop esi
     ; pop ebx
     mov eax,dword ptr [ebp-04h]
     mov esp,ebp
     pop ebp
     ret 04h

     ; vfpa_olecreatepropertyframeindirect endp

     We can use the vfpa_olecreatepropertyframeindirect() function instead of the OleCreatePropertyFrameIndirect Windows API,
     so we can use the class CFontPropPage to set the control's Font property,
     and use the class CColorPropPage to set the control's Color property,
     and use the class CPicturePropPage to set the control's Picture property.


4. APPLIES TO:

     VFP 6.0.8167.0
     VFP 6.0.8961.0 (SP5)

     VFP 7.0.0.9262
     VFP 7.0.0.9465 (SP1)

     VFP 8.0.0.2521
     VFP 8.0.0.3117 (SP1)

     VFP 9.0.0.2412
     VFP 9.0.0.3504 (SP1)
     VFP 9.0.0.4611 (SP2)
     VFP 9.0.0.5015 (SP2)
     VFP 9.0.0.5411 (SP2)
     VFP 9.0.0.5721 (SP2)
     VFP 9.0.0.5815 (SP2)
     VFP 9.0.0.6303 (SP2)
     VFP 9.0.0.6602 (SP2)
     VFP 9.0.0.7423 (SP2)

     The bug has been fixed in VFP Advanced.


5. REFERENCE WEBSITES:

     1, baiyujia.com:
     http://www.baiyujia.com

     2, microsoft.com:
     https://msdn.microsoft.com/en-us/library/w1sc4t4k(v=vs.90).aspx
     https://social.technet.microsoft.com/Forums/en-US/2c80771b-eb63-4a85-a57c-bffe2d3035cb/class-not-registered?forum=excel
     https://social.msdn.microsoft.com/Forums/en-US/f7c9d4d2-dbfa-44bd-a804-9f2fa1d27093/vs6-to-vs2010-font?forum=vclanguage

     3, stackoverflow.com:
     http://stackoverflow.com/questions/10524676/is-there-a-x64-version-of-msstkprp-dll

     4, codeguru.com:
     http://www.codeguru.com/cpp/com-tech/activex/controls/article.php/c2647/Undocumented-MS-Stock-Property-Pages-In-VC5.htm


6. OTHER:

     For reference only, there is no guarantees.

     Any questions or suggestions, please send me an email at ccb2000@163.com.