View changes to a particular Windows API header file across builds? - windows

vsstyle.h and vssym32.h are the sources of truth for some theme-related information on Windows. Specifically, they include IDs of states and parts of Win32 controls, which can be themed via.msstyles files.
These header files are packaged with Visual Studio and can be found at C:\Program Files (x86)\Windows Kits\10\Include\{BUILD}\um\{HEADER_FILE}.h.
Is there any way to see the differences in these header files across Windows builds or across Visual Studio versions?
The use case is for building an editor for .msstyles files. If the IDs of states and parts are known across Windows builds, then it'd be possible to attempt migrating a Windows 7 theme to Windows 10/11 programmatically.

Related

Is this a F++ project?

I am supposed to get a Visual Studio project to run again after several years. Originally it was written in Fortran and later a small GUI was build around it. Now my job is to change that GUI-part.
Since I am new to Visual Studio and Fortran, I need to know what kind of language the project (see below) is written in. I know there are Fortran files ( f90, fi, fd, for) but what language is .ico .rc.
It seems to be a F++-Project. But What is F++?
Is that similar to C++?
You are using Intel Visual Fortran in Microsoft Visual Studio. That little icon says Fo (for Fortran).
.ico is an icon file
.rc is a resource compiler file
These are used when creating Windows applications with a graphical user interface.
.fi and .fd are include files - the latter is created automatically from the .rc file when you build the project.

What is the difference between Reference Assemblies and Public Assemblies in Visual Studio

I have been investigating some issues with Web Performance Test Plugins in Visual Studio 2013. When adding references to the necessary dlls (e.g. Microsoft.VisualStudio.QualityTools.WebTestFramework.dll) I noticed that there are multiple entries for the same dll available in the 'Add References' window. On my system I have five choices for WebTestFramework.
Some of these I see are from earlier versions of Visual Studio which are also installed on my machine. However, I see that some are duplicates, e.g.:
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ReferenceAssemblies\WebTestFramework.dll
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PublicAssemblies\WebTestFramework.dll
I've compared the hashes of these two files and they are identical. So, why are they present in my VS 2013 (v12.0) installation twice? Why is there both a 'ReferenceAssemblies' and a 'PublicAssemblies' folder?
Well, ideally the implementation assembly doesn't appear in the list. But the control over what appears in the list isn't fine-grained enough, it can only be configured by directory, not individual assemblies. A further constraint is that Microsoft is often forced to pick less than desirable storage locations for an assembly to maintain backwards compatibility with previous VS versions so they don't break existing projects. And the test frameworks have changed a great deal through the VS versions, took them a while to get all the quirks ironed out.
Always pick the reference assembly when one is offered. They are meant to isolate you from these rapid changes and often intentionally are not a copy of the implementation assembly. You'll get it to work when you pick the implementation assembly but you risk having your test project broken in the next VS version. YMMV.

Getting Visual Studio to build pseudo-language (qps-ploc) satellite assemblies

I've generated pseudo-localized versions of an app's resource files (for example Order Summary and Payment is localized as [[[[[Òŕd̂ër̊ S̀úm̂m̈år̀ý ân̈d̊ P̀áŷm̈e̊ǹt́]]]]]) so that we can test for localizability bugs ahead of getting actual translations.
I have named them using the qps-ploc resource identifier to match the existing pseudo-locale identifier, e.g. my pseudo-localized version of Details.resx is named Details.qps-ploc.resx.
However when I add these resx files to the project, Visual Studio ignores them. If I rename them using a "real" language code (such as Details.fr-FR.resx) then Visual Studio does create a subfolder named with this language code and builds the satellite assembly.
So it looks to me like Visual Studio rejects qps-ploc (without even a build warning). Am I missing something or can anyone suggest a way to get these qps-ploc resources built as part of my Visual Studio project?
The qps- locales work fine in my ASP.NET web application with .resx files (not compiled resource dll), however, I did find this MS article on enabling pseudo locales in the registry. Perhaps it will help.
Using Pseudo-Locales for Localization Testing
Additionally, you may wish to create custom locales, as given in this MS article:
How to: Create Custom Cultures
Best regards.

Where are Windows theme constants defined?

I'm looking through the Microsoft MFC source file winctrl3.cpp and I see references to 3 symbols CBS_UNCHECKEDNORMAL, CBS_CHECKEDNORMAL, and CBS_UNCHECKEDDISABLED for drawing the check state of a checkbox. I'd like to know what the other choices are so I go searching the source files included with Visual Studio but I'm coming up empty, the single occurrence in winctrl3.cpp is the only one found.
I finally found an online Microsoft reference which tells me the values should be defined in Vsstyle.h and/or Vssym32.h, but I can't find those files in my Visual Studio 2005 installation or anywhere else on my system. What am I missing?
It's installed as part of the Windows SDK on my system (version 7, in my particular case). It may be that you need to perform a full SDK install to get that particular file or it may be a fairly recent addition to the SDK (i.e., more recent than the SDK included with Visual Studio 2005).

Visual Studio 2008 and 2010 behave differently when referencing assemblies in the file system?

I am seeing a strange phenomenon in Visual Studio 2010.
My project setup is this (I inherited this - can't change it any time soon, unfortunately :-():
a Winforms app that uses Crystal Reports X (v10) as its reporting engine; full CR X Developer Edition is installed on my dev box
several Webforms apps that use Crystal Reports XI (v11) as their reporting engine - cannot install CR XI full version, since it clashes with CR X Dev Edition....
In order to make things work on our build server, I also created a Library folder inside the Winforms app's project directory with the CR X runtime files I need, as well as a Library folder inside the web app's project directory with the CR XI runtime files.
In VS 2008, I was able to pick the necessary assemblies from the respective library folder in my Winforms projects (several class libraries etc.), and in my web apps. Everything worked great.
When I updated to Visual Studio 2010, now suddenly I'm seeing:
in my Winforms apps, all the references to CR X runtime files are being automagically updated to use the CR X files from the GAC - this is not what I want! It doesn't help if I delete those references and re-add them again by browsing to the Library folder - when I pick them, VS2010 seems to automagically conver them to GAC references again...
in my Web apps, things get even worse: when I pick the CR XI runtime assemblies from the Library folder, again, VS2010 automagically seems to detect there are similar files (same name, but different versions) in the GAC and uses those files instead - now my web apps don't work anymore.....
What the h*** is going on with VS 2010 here?? Why can't it leave my selections alone and let me choose my runtime files from a Library folder instead of insisting on going to the GAC?? What has changed between VS 2008 and VS 2010 in this respect?? Does anyone have any insights into this??
It may be useful to either
(1) go to Tools\Options\Project&Solutions\Build&Run and change MSBuild verbosity to 'diagnostic' and then build and in the Output window see how the MSBuild reference resolution logic is working for those assemblies. That is, if VS hasn't already done something ridiculous to the underlying .csproj file
(2) compare the XML in the VS2008 project file versus the VS2010 project file to see what's in the <Reference> nodes
A wild speculative guess: the VS2010 project is targeting ".NET 4.0 Client" (rather than ".NET 4.0 (full framework)", and the libraries need the full framework, and MSBuild sees this dependency and is using fallback logic.

Resources