{"id":38753,"date":"2004-06-23T07:00:00","date_gmt":"2004-06-23T07:00:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/oldnewthing\/2004\/06\/23\/the-evolution-of-dialog-templates-32-bit-extended-templates\/"},"modified":"2004-06-23T07:00:00","modified_gmt":"2004-06-23T07:00:00","slug":"the-evolution-of-dialog-templates-32-bit-extended-templates","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/oldnewthing\/20040623-00\/?p=38753","title":{"rendered":"The evolution of dialog templates &#8211; 32-bit Extended Templates"},"content":{"rendered":"<p>\nAt last we reach our goal, the 32-bit extended dialog template,\nknown in resource files as DIALOGEX.\nI will celebrate this with a gratuitous\n<a HREF=\"http:\/\/mathworld.wolfram.com\/CommutativeDiagram.html\">commutative diagram<\/a>:\n<\/p>\n<table BORDER=\"0\">\n<tr>\n<td STYLE=\"border:solid .5pt black;padding: 1ex\">\n        16-bit DIALOG\n    <\/td>\n<td>\n        <font SIZE=\"+2\">&rarr;<\/font><\/p>\n<div STYLE=\"text-align: center\">32<\/div>\n<\/td>\n<td STYLE=\"border:solid .5pt black;padding: 1ex\">\n        32-bit DIALOG\n    <\/td>\n<\/tr>\n<tr>\n<td ALIGN=\"CENTER\">\n        <font SIZE=\"+2\">&darr;<\/font>\n        EX\n    <\/td>\n<td>\n    <\/td>\n<td ALIGN=\"CENTER\">\n        <font SIZE=\"+2\">&darr;<\/font>\n        EX\n    <\/td>\n<\/tr>\n<tr>\n<td STYLE=\"border:solid .5pt black;padding: 1ex\">\n        16-bit DIALOGEX\n    <\/td>\n<td>\n        <font SIZE=\"+2\">&rarr;<\/font><\/p>\n<div STYLE=\"text-align: center\">32<\/div>\n<\/td>\n<td STYLE=\"border:solid .5pt black;padding: 1ex\">\n        32-bit DIALOGEX\n    <\/td>\n<\/tr>\n<\/table>\n<p>\nIsn&#8217;t that special.\n<\/p>\n<p>\nOkay, so let&#8217;s get going.  The 32-bit extended dialog template\nis the 32-bit version of the 16-bit extended dialog template,\nso you won&#8217;t see any real surprises if you&#8217;ve been following along.\n<\/p>\n<p>\nOnce again, we start with a header, this time the 32-bit extended header.\n<\/p>\n<pre>\nWORD  wDlgVer;      \/\/ version number - always 1\nWORD  wSignature;   \/\/ always 0xFFFF\nDWORD dwHelpID;     \/\/ help ID\nDWORD dwExStyle;    \/\/ window extended style\nDWORD dwStyle;      \/\/ dialog style\nWORD  cItems;       \/\/ number of controls in this dialog\nWORD  x;            \/\/ x-coordinate\nWORD  y;            \/\/ y-coordinate\nWORD  cx;           \/\/ width\nWORD  cy;           \/\/ height\n<\/pre>\n<p>\nThe first two fields serve exactly the same purpose as the 16-bit\nextended template: They identify this header as an extended dialog template.\n<\/p>\n<p>\nAs before, the next two fields are new.\nThe help identifier is attached to the dialog via the\n<a HREF=\"http:\/\/msdn.microsoft.com\/library\/en-us\/shellcc\/platform\/shell\/reference\/functions\/setwindowcontexthelpid.asp\">\nSetWindowContextHelpId<\/a> function,\nand the extended dialog style shouldn&#8217;t be a surprise.\n<\/p>\n<p>\nYou know the drill: Next come the three strings for the menu,\nclass, and dialog title.\nSince this is the 32-bit template, the strings are Unicode.\n<\/p>\n<p>\nAs with the 16-bit extended template, the optional custom font\nconsists of a little more information than the non-extended template:\n<\/p>\n<pre>\nWORD wPoint;        \/\/ point size\nWORD wWeight;       \/\/ font weight\nBYTE bItalic;       \/\/ 1 if italic, 0 if not\nBYTE bCharSet;      \/\/ character set\nWCHAR szFontName[]; \/\/ variable-length\n<\/pre>\n<p>\nAs before, the point, weight, italic and character set are all passed\nto\n<a HREF=\"http:\/\/msdn.microsoft.com\/library\/en-us\/gdi\/fontext_8fp0.asp\">\nthe CreateFont function<\/a>.\n<\/p>\n<p>\nAfter the header come the dialog item templates, each of which\nmust be aligned on a DWORD boundary.\n<\/p>\n<pre>\nDWORD dwHelpID;     \/\/ help identifier\nDWORD dwExStyle;    \/\/ window extended style\nDWORD dwStyle;      \/\/ window style\nWORD  x;            \/\/ x-coordinate (DLUs)\nWORD  y;            \/\/ y-coordinate (DLUs)\nWORD  cx;           \/\/ width (DLUs)\nWORD  cy;           \/\/ height (DLUs)\nDWORD dwID;         \/\/ control ID\nWCHAR szClassName[];\/\/ variable-length (possibly ordinal)\nWCHAR szText[];     \/\/ variable-length (possibly ordinal)\nWORD  cbExtra;      \/\/ amount of extra data\nBYTE  rgbExtra[cbExtra]; \/\/ extra data follows (usually none)\n<\/pre>\n<p>\nThe changes here:\n<\/p>\n<ul>\n<li>New dwHelpID and dwExStyle fields.\n<li>The dwStyle field has moved.\n<li>The control ID has grown to a 32-bit value.\n<\/ul>\n<p>\nNot that expanding the control ID to a 32-bit value helps any,\nbecause WM_COMMAND and similar messages still use a 16-bit value\nto pass the control ID.  So in practice, you can&#8217;t use a value\ngreater than 16 bits.  (Well, you can always ignore the control ID\nfield and retrieve the full 32-bit control ID via the\n<a HREF=\"http:\/\/msdn.microsoft.com\/library\/en-us\/winui\/WinUI\/WindowsUserInterface\/Windowing\/DialogBoxes\/DialogBoxReference\/DialogBoxFunctions\/GetDlgCtrlID.asp\">\nGetDlgCtrlID<\/a> function,\nassuming you have the window handle of the control available.)\n<\/p>\n<p>\nAnd that&#8217;s all there is to it.\n<\/p>\n<p>\nHere&#8217;s the customary annotated hex dump.\n<\/p>\n<pre>\n0000  01 00 FF FF 00 00 00 00-00 00 00 00 C4 00 C8 80  ................\n0010  0B 00 24 00 2C 00 E6 00-5E 00 00 00 00 00 52 00  ..$.,...^.....R.\n0020  65 00 70 00 6C 00 61 00-63 00 65 00 00 00 08 00  e.p.l.a.c.e.....\n0030  00 00 00 01 4D 00 53 00-20 00 53 00 68 00 65 00  ....M.S. .S.h.e.\n0040  6C 00 6C 00 20 00 44 00-6C 00 67 00 00 00 00 00  l.l. .D.l.g.....\n0050  00 00 00 00 00 00 00 00-00 00 02 50 04 00 09 00  ...........P....\n0060  30 00 08 00 FF FF FF FF-FF FF 82 00 46 00 69 00  0...........F.i.\n0070  26 00 6E 00 64 00 20 00-57 00 68 00 61 00 74 00  &amp;.n.d. .W.h.a.t.\n0080  3A 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  :...............\n0090  80 00 83 50 36 00 07 00-72 00 0C 00 80 04 00 00  ...P6...r.......\n00A0  FF FF 81 00 00 00 00 00-00 00 00 00 00 00 00 00  ................\n00B0  00 00 02 50 04 00 1A 00-30 00 08 00 FF FF FF FF  ...P....0.......\n00C0  FF FF 82 00 52 00 65 00-26 00 70 00 6C 00 61 00  ....R.e.&amp;.p.l.a.\n00D0  63 00 65 00 20 00 77 00-69 00 74 00 68 00 3A 00  c.e. .w.i.t.h.:.\n00E0  00 00 00 00 00 00 00 00-00 00 00 00 80 00 83 50  ...............P\n00F0  36 00 18 00 72 00 0C 00-81 04 00 00 FF FF 81 00  6...r...........\n0100  00 00 00 00 00 00 00 00-00 00 00 00 03 00 03 50  ...............P\n0110  05 00 2E 00 68 00 0C 00-10 04 00 00 FF FF 80 00  ....h...........\n0120  4D 00 61 00 74 00 63 00-68 00 20 00 26 00 77 00  M.a.t.c.h. .&amp;.w.\n0130  68 00 6F 00 6C 00 65 00-20 00 77 00 6F 00 72 00  h.o.l.e. .w.o.r.\n0140  64 00 20 00 6F 00 6E 00-6C 00 79 00 00 00 00 00  d. .o.n.l.y.....\n0150  00 00 00 00 00 00 00 00-03 00 01 50 05 00 3E 00  ...........P..&gt;.\n0160  3B 00 0C 00 11 04 00 00-FF FF 80 00 4D 00 61 00  ;...........M.a.\n0170  74 00 63 00 68 00 20 00-26 00 63 00 61 00 73 00  t.c.h. .&amp;.c.a.s.\n0180  65 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  e...............\n0190  01 00 03 50 AE 00 04 00-32 00 0E 00 01 00 00 00  ...P....2.......\n01A0  FF FF 80 00 26 00 46 00-69 00 6E 00 64 00 20 00  ....&amp;.F.i.n.d. .\n01B0  4E 00 65 00 78 00 74 00-00 00 00 00 00 00 00 00  N.e.x.t.........\n01C0  00 00 00 00 00 00 01 50-AE 00 15 00 32 00 0E 00  .......P....2...\n01D0  00 04 00 00 FF FF 80 00-26 00 52 00 65 00 70 00  ........&amp;.R.e.p.\n01E0  6C 00 61 00 63 00 65 00-00 00 00 00 00 00 00 00  l.a.c.e.........\n01F0  00 00 00 00 00 00 01 50-AE 00 26 00 32 00 0E 00  .......P..&amp;.2...\n0200  01 04 00 00 FF FF 80 00-52 00 65 00 70 00 6C 00  ........R.e.p.l.\n0210  61 00 63 00 65 00 20 00-26 00 41 00 6C 00 6C 00  a.c.e. .&amp;.A.l.l.\n0220  00 00 00 00 00 00 00 00-00 00 00 00 00 00 01 50  ...............P\n0230  AE 00 37 00 32 00 0E 00-02 00 00 00 FF FF 80 00  ..7.2...........\n0240  43 00 61 00 6E 00 63 00-65 00 6C 00 00 00 00 00  C.a.n.c.e.l.....\n0250  00 00 00 00 00 00 00 00-00 00 01 50 AE 00 4B 00  ...........P..K.\n0260  32 00 0E 00 0E 04 00 00-FF FF 80 00 26 00 48 00  2...........&amp;.H.\n0270  65 00 6C 00 70 00 00 00-00 00                    e.l.p.....\n<\/pre>\n<p>\nAs always, the header comes first.\n<\/p>\n<pre>\n0000  01 00         \/\/ wVersion\n0002  FF FF         \/\/ wSignature\n0004  00 00 00 00   \/\/ dwHelpID\n0008  00 00 00 00   \/\/ dwExStyle\n000C  C4 00 C8 80   \/\/ dwStyle\n0010  0B 00         \/\/ cItems\n0012  24 00 2C 00   \/\/ x, y\n0016  E6 00 5E 00   \/\/ cx, cy\n<\/pre>\n<p>\nNothing surprising here; you&#8217;ve seen it before.\n<\/p>\n<table>\n<col SPAN=\"3\" VALIGN=\"TOP\">\n<tr>\n<td>wVersion<\/td>\n<td>= 0x0001<\/td>\n<td>= 1<\/td>\n<\/tr>\n<tr>\n<td>wSignature<\/td>\n<td>= 0xFFFF<\/td>\n<\/tr>\n<tr>\n<td>dwHelpID<\/td>\n<td>= 0x00000000<\/td>\n<td>= 0<\/td>\n<\/tr>\n<tr>\n<td>dwExStyle<\/td>\n<td>= 0x00000000<\/td>\n<td>= 0<\/td>\n<\/tr>\n<tr>\n<td>dwStyle<\/td>\n<td>= 0x80C800C4<\/td>\n<td>= WS_POPUP | WS_CAPTION | WS_SYSMENU |\n          DS_SETFONT | DS_MODALFRAME | DS_3DLOOK\n    <\/td>\n<\/tr>\n<tr>\n<td>cItems<\/td>\n<td>= 0x000B<\/td>\n<td>= 11<\/td>\n<\/tr>\n<tr>\n<td>x<\/td>\n<td>= 0x0024<\/td>\n<td>= 36<\/td>\n<\/tr>\n<tr>\n<td>y<\/td>\n<td>= 0x002C<\/td>\n<td>= 44<\/td>\n<\/tr>\n<tr>\n<td>cx<\/td>\n<td>= 0x00E6<\/td>\n<td>= 230<\/td>\n<\/tr>\n<tr>\n<td>cy<\/td>\n<td>= 0x005E<\/td>\n<td>= 94<\/td>\n<\/tr>\n<\/table>\n<p>\nAfter the header\ncome the menu name, class name, and dialog title:\n<\/p>\n<pre>\n001A  00 00         \/\/ no menu\n001C  00 00         \/\/ default dialog class\n001E  52 00 65 00 70 00 6C 00 61 00 63 00\n      65 00 00 00   \/\/ \"Replace\"\n<\/pre>\n<p>\nAnd since DS_SETFONT is set in the dialog style,\nfont information comes next.  Notice that the additional\nfont characteristics are included in the extended template.\n<\/p>\n<pre>\n002E  08 00         \/\/ wSize = 8\n0030  00 00         \/\/ wWeight = 0x0000 = FW_DONTCARE\n0032  00            \/\/ Italic\n0033  01            \/\/ Character set = 0x01 = DEFAULT_CHARSET\n0034  4D 00 53 00 20 00 53 00 68 00 65 00 6C 00\n      6C 00 20 00 44 00 6C 00 67 00 00 00\n                    \/\/ \"MS Shell Dlg\"\n<\/pre>\n<p>\nYou&#8217;ve seen this all before.  Here come the extended dialog item\ntemplates.  Remember, these must be DWORD-aligned.\n<\/p>\n<pre>\n004E  00 00         \/\/ padding to achieve DWORD alignment\n\/\/ First control\n0050  00 00 00 00   \/\/ dwHelpID\n0054  00 00 00 00   \/\/ dwExStyle\n0058  00 00 02 50   \/\/ dwStyle\n005C  04 00 09 00   \/\/ x, y\n0060  30 00 08 00   \/\/ cx, cy\n0064  FF FF FF FF   \/\/ wID\n0068  FF FF 82 00   \/\/ szClass = ordinal 0x0082 = \"static\"\n006C  46 00 69 00\n0070  26 00 6E 00 64 00 20 00 77 00 68 00 61 00 74 00\n0080  3A 00 00 00   \/\/ \"Fi&amp;nd what:\"\n0084  00 00         \/\/ no extra data\n0086  00 00         \/\/ padding to achieve DWORD alignment\n\/\/ Second control\n0088  00 00 00 00   \/\/ dwHelpID\n008C  00 00 00 00   \/\/ dwExStyle\n0090  80 00 83 50   \/\/ dwStyle\n0094  36 00 07 00   \/\/ x, y\n0098  72 00 0C 00   \/\/ cx, cy\n009C  80 04 00 00   \/\/ wID\n00A0  FF FF 81 00   \/\/ \"edit\"\n00A4  00 00         \/\/ \"\"\n00A6  00 00         \/\/ no extra data\n\/\/ Third control\n00A8  00 00 00 00   \/\/ dwHelpID\n00AC  00 00 00 00   \/\/ dwExStyle\n00B0  00 00 02 50   \/\/ dwStyle\n00B4  04 00 1A 00   \/\/ x, y\n00B8  30 00 08 00   \/\/ cx, cy\n00BC  FF FF FF FF   \/\/ wID\n00C0  FF FF 82 00   \/\/ \"static\"\n00C4  52 00 65 00 26 00 70 00 6C 00 61 00\n00D0  63 00 65 00 20 00 77 00 69 00 74 00 68 00 3A 00\n00E0  00 00         \/\/ \"Re&amp;place with:\"\n00E2  00 00         \/\/ no extra data\n\/\/ Fourth control\n00E4  00 00 00 00   \/\/ dwHelpID\n00E8  00 00 00 00   \/\/ dwExStyle\n00EC  80 00 83 50   \/\/ dwStyle\n00F0  36 00 18 00   \/\/ x, y\n00F4  72 00 0C 00   \/\/ cx, cy\n00F8  81 04 00 00   \/\/ wID\n00FC  FF FF 81 00   \/\/ \"edit\"\n0100  00 00         \/\/ \"\"\n0102  00 00         \/\/ no extra data\n\/\/ Fifth control\n0104  00 00 00 00   \/\/ dwHelpID\n0108  00 00 00 00   \/\/ dwExStyle\n010C  03 00 03 50   \/\/ dwStyle\n0110  05 00 2E 00   \/\/ x, y\n0114  68 00 0C 00   \/\/ cx, cy\n0118  10 04 00 00   \/\/ wID\n011C  FF FF 80 00   \/\/ \"button\"\n0120  4D 00 61 00 74 00 63 00 68 00 20 00 26 00 77 00\n0130  68 00 6F 00 6C 00 65 00 20 00 77 00 6F 00 72 00\n0140  64 00 20 00 6F 00 6E 00 6C 00 79 00 00 00\n                    \/\/ \"Match &amp;whole word only\"\n014E  00 00         \/\/ no extra data\n\/\/ Sixth control\n0150  00 00 00 00   \/\/ dwHelpID\n0154  00 00 00 00   \/\/ dwExStyle\n0158  03 00 01 50   \/\/ dwStyle\n015C  05 00 3E 00   \/\/ x, y\n0160  3B 00 0C 00   \/\/ cx, cy\n0164  11 04 00 00   \/\/ wID\n0168  FF FF 80 00   \/\/ \"button\"\n016C  4D 00 61 00\n0170  74 00 63 00 68 00 20 00 26 00 63 00 61 00 73 00\n0180  65 00 00 00   \/\/ \"Match &amp;case\"\n0184  00 00         \/\/ no extra data\n0186  00 00         \/\/ padding to achieve DWORD alignment\n\/\/ Seventh control\n0188  00 00 00 00   \/\/ dwHelpID\n018C  00 00 00 00   \/\/ dwExStyle\n0190  01 00 03 50   \/\/ dwStyle\n0194  AE 00 04 00   \/\/ x, y\n0198  32 00 0E 00   \/\/ cx, cy\n019C  01 00 00 00   \/\/ wID\n01A0  FF FF 80 00   \/\/ \"button\"\n01A4  26 00 46 00 69 00 6E 00 64 00 20 00\n01B0  4E 00 65 00 78 00 74 00 00 00\n                    \/\/ \"&amp;Find Next\"\n01BA  00 00         \/\/ no extra data\n\/\/ Eighth control\n01BC  00 00 00 00   \/\/ dwHelpID\n01C0  00 00 00 00   \/\/ dwExStyle\n01C4  00 00 03 50   \/\/ dwStyle\n01C8  AE 00 15 00   \/\/ x, y\n01CC  32 00 0E 00   \/\/ cx, cy\n01D0  00 04 00 00   \/\/ wID\n01D4  FF FF 80 00   \/\/ \"button\"\n01D8  26 00 52 00 65 00 70 00\n                    \/\/ \"&amp;Replace\"\n01E0  6C 00 61 00 63 00 65 00 00 00\n01EA  00 00         \/\/ no extra data\n\/\/ Ninth control\n01EC  00 00 00 00   \/\/ dwHelpID\n01F0  00 00 00 00   \/\/ dwExStyle\n01F4  00 00 03 50   \/\/ dwStyle\n01F8  AE 00 26 00   \/\/ x, y\n01FC  32 00 0E 00   \/\/ cx, cy\n0200  01 04 00 00   \/\/ wID\n0204  FF FF 80 00   \/\/ \"button\"\n0208  52 00 65 00 70 00 6C 00\n0210  61 00 63 00 65 00 20 00 26 00 41 00 6C 00 6C 00\n0220  00 00         \/\/ \"Replace &amp;All\"\n0222  00 00         \/\/ no extra data\n\/\/ Tenth control\n0224  00 00 00 00   \/\/ dwHelpID\n0228  00 00 00 00   \/\/ dwExStyle\n022C  00 00 01 50   \/\/ dwStyle\n0230  AE 00 37 00   \/\/ x, y\n0234  32 00 0E 00   \/\/ cx, cy\n0238  02 00 00 00   \/\/ wID\n023C  FF FF 80 00   \/\/ \"button\"\n0240  43 00 61 00 6E 00 63 00 65 00 6C 00 00 00\n                    \/\/ \"Cancel\"\n024E  00 00         \/\/ no extra data\n\/\/ Eleventh control\n0250  00 00 00 00   \/\/ dwHelpID\n0254  00 00 00 00   \/\/ dwExStyle\n0258  00 00 03 50   \/\/ dwStyle\n025C  AE 00 4B 00   \/\/ x, y\n0260  32 00 0E 00   \/\/ cx, cy\n0264  0E 04 00 00   \/\/ wID\n0268  FF FF 80 00   \/\/ \"button\"\n026C  26 00 48 00\n0270  65 00 6C 00 70 00 00 00\n                    \/\/ \"&amp;Help\"\n0278  00 00         \/\/ no extra data\n<\/pre>\n<p>\nThe original dialog template is, of course, the one you&#8217;re probably sick of\nby now.  The only change is that\nthe DIALOG keyword has been changed to DIALOGEX.<\/p>\n<pre>\n<font COLOR=\"red\">DIALOGEX<\/font> 36, 44, 230, 94\n...\n<\/pre>\n<p>\nSo that&#8217;s the last of the dialog template formats.  Tomrrow, a chart\nthat tries to summarize everything at a glance.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>At last we reach our goal, the 32-bit extended dialog template, known in resource files as DIALOGEX. I will celebrate this with a gratuitous commutative diagram: 16-bit DIALOG &rarr; 32 32-bit DIALOG &darr; EX &darr; EX 16-bit DIALOGEX &rarr; 32 32-bit DIALOGEX Isn&#8217;t that special. Okay, so let&#8217;s get going. The 32-bit extended dialog template [&hellip;]<\/p>\n","protected":false},"author":1069,"featured_media":111744,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[2],"class_list":["post-38753","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oldnewthing","tag-history"],"acf":[],"blog_post_summary":"<p>At last we reach our goal, the 32-bit extended dialog template, known in resource files as DIALOGEX. I will celebrate this with a gratuitous commutative diagram: 16-bit DIALOG &rarr; 32 32-bit DIALOG &darr; EX &darr; EX 16-bit DIALOGEX &rarr; 32 32-bit DIALOGEX Isn&#8217;t that special. Okay, so let&#8217;s get going. The 32-bit extended dialog template [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/38753","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/users\/1069"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/comments?post=38753"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/38753\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/media\/111744"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/media?parent=38753"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/categories?post=38753"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/tags?post=38753"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}