wxExtend/tlwgeom_8h_source.html

430 lines
52 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.10.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>wxExtend: include/wxex/private/tlwgeom.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">wxExtend
</div>
<div id="projectbrief">Additional templates and function helpers for wxWidgets</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.10.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_2fafa5ce03815a2bdea8d271fa718211.html">wxex</a></li><li class="navelem"><a class="el" href="dir_66ccda734b8df6d1bfeadfb0d10c9c77.html">private</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">tlwgeom.h</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> SPDX-License-Identifier: GPL-3.0-or-later</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> Copyright © 2015-2022 Amebis</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> Copyright © 2016 GÉANT</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">*/</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &lt;codeanalysis\warnings.h&gt;</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#pragma warning(push)</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#pragma warning(disable: WXWIDGETS_CODE_ANALYSIS_WARNINGS)</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &lt;wx/dynlib.h&gt;</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include &lt;wx/private/tlwgeom.h&gt;</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#pragma warning(pop)</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#ifndef USER_DEFAULT_SCREEN_DPI</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define USER_DEFAULT_SCREEN_DPI 96</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#define wxPERSIST_TLW_MONITOR_X &quot;xmon&quot;</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#define wxPERSIST_TLW_MONITOR_Y &quot;ymon&quot;</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#define wxPERSIST_TLW_MONITOR_W &quot;wmon&quot;</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#define wxPERSIST_TLW_MONITOR_H &quot;hmon&quot;</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#define wxPERSIST_TLW_DPI_HORZ &quot;xdpi&quot;</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#define wxPERSIST_TLW_DPI_VERT &quot;ydpi&quot;</span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="keyword">class </span>wxTLWGeometryEx : <span class="keyword">public</span> wxTLWGeometryBase</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span>{</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> wxTLWGeometryEx()</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> {</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> wxZeroMemory(m_placement);</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> m_placement.length = <span class="keyword">sizeof</span>(m_placement);</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> wxZeroMemory(m_mntinfo);</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> m_mntinfo.cbSize = <span class="keyword">sizeof</span>(m_mntinfo);</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> m_dpiHorz = USER_DEFAULT_SCREEN_DPI;</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> m_dpiVert = USER_DEFAULT_SCREEN_DPI;</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> }</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> Save(<span class="keyword">const</span> Serializer&amp; ser) <span class="keyword">const</span> wxOVERRIDE</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> {</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="comment">// For compatibility with the existing saved positions/sizes, use the</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="comment">// same keys as the generic version (which was previously used under</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="comment">// MSW too).</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="comment">// Normal position and size.</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">const</span> RECT&amp; rc = m_placement.rcNormalPosition;</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">if</span> (!ser.SaveField(wxPERSIST_TLW_X, rc.left) ||</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> !ser.SaveField(wxPERSIST_TLW_Y, rc.top) ||</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> !ser.SaveField(wxPERSIST_TLW_W, rc.right - rc.left) ||</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> !ser.SaveField(wxPERSIST_TLW_H, rc.bottom - rc.top))</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="comment">// Maximized/minimized state.</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> UINT show = m_placement.showCmd;</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">if</span> (!ser.SaveField(wxPERSIST_TLW_MAXIMIZED, show == SW_SHOWMAXIMIZED))</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">if</span> (!ser.SaveField(wxPERSIST_TLW_ICONIZED, show == SW_SHOWMINIMIZED))</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="comment">// Maximized window position.</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">const</span> POINT pt = m_placement.ptMaxPosition;</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">if</span> (!ser.SaveField(wxPERSIST_TLW_MAX_X, pt.x) ||</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> !ser.SaveField(wxPERSIST_TLW_MAX_Y, pt.y))</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="comment">// We don&#39;t currently save the minimized window position, it doesn&#39;t</span></div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="comment">// seem useful for anything and is probably just a left over from</span></div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="comment">// Windows 3.1 days, when icons were positioned on the desktop instead</span></div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="comment">// of being located in the taskbar.</span></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="comment">// Monitor position and size.</span></div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">const</span> RECT&amp; rcMon = m_mntinfo.rcWork;</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">if</span> (!ser.SaveField(wxPERSIST_TLW_MONITOR_X, rcMon.left) ||</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> !ser.SaveField(wxPERSIST_TLW_MONITOR_Y, rcMon.top) ||</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> !ser.SaveField(wxPERSIST_TLW_MONITOR_W, rcMon.right - rcMon.left) ||</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> !ser.SaveField(wxPERSIST_TLW_MONITOR_H, rcMon.bottom - rcMon.top))</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="comment">// DPI.</span></div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">if</span> (!ser.SaveField(wxPERSIST_TLW_DPI_HORZ, m_dpiHorz) ||</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> !ser.SaveField(wxPERSIST_TLW_DPI_VERT, m_dpiVert))</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> }</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> Restore(Serializer&amp; ser) wxOVERRIDE</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> {</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="comment">// Normal position and size.</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> wxRect r;</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">if</span> (!ser.RestoreField(wxPERSIST_TLW_X, &amp;r.x) ||</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> !ser.RestoreField(wxPERSIST_TLW_Y, &amp;r.y) ||</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> !ser.RestoreField(wxPERSIST_TLW_W, &amp;r.width) ||</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> !ser.RestoreField(wxPERSIST_TLW_H, &amp;r.height))</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> wxCopyRectToRECT(r, m_placement.rcNormalPosition);</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="comment">// Maximized/minimized state.</span></div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="comment">//</span></div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="comment">// Note the special case of SW_MINIMIZE: while GetWindowPlacement()</span></div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="comment">// returns SW_SHOWMINIMIZED when the window is iconized, we restore it</span></div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="comment">// as SW_MINIMIZE as this is what the code in wxTLW checks to determine</span></div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="comment">// whether the window is supposed to be iconized or not.</span></div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="comment">//</span></div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="comment">// Just to confuse matters further, note that SW_MAXIMIZE is exactly</span></div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="comment">// the same thing as SW_SHOWMAXIMIZED.</span></div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">int</span> tmp;</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> UINT&amp; show = m_placement.showCmd;</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">if</span> (ser.RestoreField(wxPERSIST_TLW_MAXIMIZED, &amp;tmp) &amp;&amp; tmp)</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> show = SW_MAXIMIZE;</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ser.RestoreField(wxPERSIST_TLW_ICONIZED, &amp;tmp) &amp;&amp; tmp)</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> show = SW_MINIMIZE;</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> show = SW_SHOWNORMAL;</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="comment">// Maximized window position.</span></div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">if</span> (ser.RestoreField(wxPERSIST_TLW_MAX_X, &amp;r.x) &amp;&amp;</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> ser.RestoreField(wxPERSIST_TLW_MAX_Y, &amp;r.y))</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> {</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> m_placement.ptMaxPosition.x = r.x;</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> m_placement.ptMaxPosition.y = r.y;</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> m_placement.ptMaxPosition.x = -1;</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> m_placement.ptMaxPosition.y = -1;</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> }</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> m_placement.ptMinPosition.x = -1;</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> m_placement.ptMinPosition.y = -1;</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> </div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="comment">// Monitor position and size.</span></div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> wxRect rmon;</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span> (!ser.RestoreField(wxPERSIST_TLW_MONITOR_X, &amp;rmon.x) ||</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> !ser.RestoreField(wxPERSIST_TLW_MONITOR_Y, &amp;rmon.y) ||</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> !ser.RestoreField(wxPERSIST_TLW_MONITOR_W, &amp;rmon.width) ||</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> !ser.RestoreField(wxPERSIST_TLW_MONITOR_H, &amp;rmon.height))</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> wxCopyRectToRECT(rmon, m_mntinfo.rcWork);</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="comment">// DPI.</span></div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">if</span> (!ser.RestoreField(wxPERSIST_TLW_DPI_HORZ, &amp;r.x) ||</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> !ser.RestoreField(wxPERSIST_TLW_DPI_VERT, &amp;r.y))</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> m_dpiHorz = r.x;</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> m_dpiVert = r.y;</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> </div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> }</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> GetFrom(<span class="keyword">const</span> wxTopLevelWindow* tlw) wxOVERRIDE</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> {</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> WXHWND hWnd = GetHwndOf(tlw);</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">if</span> (!::GetWindowPlacement(hWnd, &amp;m_placement))</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> {</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> wxLogLastError(wxS(<span class="stringliteral">&quot;GetWindowPlacement&quot;</span>));</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> }</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> </div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> HMONITOR hMonitor = ::MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST);</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> wxASSERT_MSG(hMonitor, wxT(<span class="stringliteral">&quot;error locating monitor&quot;</span>));</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> _Analysis_assume_(hMonitor);</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">if</span> (!::GetMonitorInfo(hMonitor, &amp;m_mntinfo))</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> {</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> wxLogLastError(wxS(<span class="stringliteral">&quot;GetMonitorInfo&quot;</span>));</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> }</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> </div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> GetDPI(hWnd, &amp;m_dpiHorz, &amp;m_dpiVert) || GetDPI(hMonitor, &amp;m_dpiHorz, &amp;m_dpiVert);</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> }</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> </div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> ApplyTo(wxTopLevelWindow* tlw) wxOVERRIDE</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> {</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="comment">// There is a subtlety here: if the window is currently hidden,</span></div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="comment">// restoring its geometry shouldn&#39;t show it, so we must use SW_HIDE as</span></div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="comment">// show command, but showing it later should restore it to the correct</span></div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="comment">// state, so we need to remember it in wxTLW itself. And even if it&#39;s</span></div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="comment">// currently shown, we still need to update its show command, so that</span></div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="comment">// it matches the real window state after SetWindowPlacement() call.</span></div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> tlw-&gt;MSWSetShowCommand(m_placement.showCmd);</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">if</span> (!tlw-&gt;IsShown())</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> {</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> m_placement.showCmd = SW_HIDE;</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> }</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="comment">// Get monitor to restore window to.</span></div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> HMONITOR hMonitor = ::MonitorFromRect(&amp;m_mntinfo.rcWork, MONITOR_DEFAULTTONEAREST);</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> wxASSERT_MSG(hMonitor, wxT(<span class="stringliteral">&quot;error locating monitor&quot;</span>));</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> _Analysis_assume_(hMonitor);</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> MONITORINFO mntinfo;</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> mntinfo.cbSize = <span class="keyword">sizeof</span>(mntinfo);</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="keywordflow">if</span> (!::GetMonitorInfo(hMonitor, &amp;mntinfo))</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> {</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> wxLogLastError(wxS(<span class="stringliteral">&quot;GetMonitorInfo&quot;</span>));</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> }</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> </div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> UINT dpiHorz, dpiVert;</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> GetDPI(hMonitor, &amp;dpiHorz, &amp;dpiVert);</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> </div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> SIZE</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> sizeWorkPrev = {</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> m_mntinfo.rcWork.right - m_mntinfo.rcWork.left,</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> m_mntinfo.rcWork.bottom - m_mntinfo.rcWork.top</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> },</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> sizeWork = {</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> mntinfo.rcWork.right - mntinfo.rcWork.left,</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> mntinfo.rcWork.bottom - mntinfo.rcWork.top</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> };</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="comment">//</span></div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="comment">// Project the coordinates:</span></div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="comment">// - Position relative to monitor working area center.</span></div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="comment">// - Scale according to DPI.</span></div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="comment">//</span></div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> </div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">if</span> (m_placement.ptMaxPosition.x != -1 &amp;&amp; m_placement.ptMaxPosition.y != -1) {</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> m_placement.ptMaxPosition.x = wxMulDivInt32(m_placement.ptMaxPosition.x - m_mntinfo.rcWork.left, sizeWork.cx, sizeWorkPrev.cx) + mntinfo.rcWork.left;</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> m_placement.ptMaxPosition.y = wxMulDivInt32(m_placement.ptMaxPosition.y - m_mntinfo.rcWork.top, sizeWork.cy, sizeWorkPrev.cy) + mntinfo.rcWork.top;</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> }</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> </div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> SIZE sizeWndPrev, sizeWnd;</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> HWND hWnd = GetHwndOf(tlw);</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> </div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="keywordflow">if</span> (tlw-&gt;GetWindowStyle() &amp; wxRESIZE_BORDER) {</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> sizeWndPrev.cx = m_placement.rcNormalPosition.right - m_placement.rcNormalPosition.left;</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> sizeWndPrev.cy = m_placement.rcNormalPosition.bottom - m_placement.rcNormalPosition.top;</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> sizeWnd.cx = wxMulDivInt32(sizeWndPrev.cx, dpiHorz, m_dpiHorz);</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> sizeWnd.cy = wxMulDivInt32(sizeWndPrev.cy, dpiVert, m_dpiVert);</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="comment">// The window is not resizable. Do not change its size.</span></div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> WINDOWPLACEMENT placement = { <span class="keyword">sizeof</span>(placement) };</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">if</span> (!::GetWindowPlacement(hWnd, &amp;placement))</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> {</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> wxLogLastError(wxS(<span class="stringliteral">&quot;GetWindowPlacement&quot;</span>));</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> }</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> SIZE size = {</div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> placement.rcNormalPosition.right - placement.rcNormalPosition.left,</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> placement.rcNormalPosition.bottom - placement.rcNormalPosition.top</div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> };</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> </div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> UINT dpiWndHorz, dpiWndVert;</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> GetDPI(hWnd, &amp;dpiWndHorz, &amp;dpiWndVert) || GetDPI(::MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST), &amp;dpiWndHorz, &amp;dpiWndVert);</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> </div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> sizeWndPrev.cx = wxMulDivInt32(size.cx, m_dpiHorz, dpiWndHorz);</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> sizeWndPrev.cy = wxMulDivInt32(size.cy, m_dpiVert, dpiWndVert);</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> sizeWnd.cx = wxMulDivInt32(size.cx, dpiHorz, dpiWndHorz);</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> sizeWnd.cy = wxMulDivInt32(size.cy, dpiVert, dpiWndVert);</div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> }</div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> </div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> m_placement.rcNormalPosition.left = wxMulDivInt32(m_placement.rcNormalPosition.left + sizeWndPrev.cx / 2 - m_mntinfo.rcWork.left, sizeWork.cx, sizeWorkPrev.cx) + mntinfo.rcWork.left - sizeWnd.cx / 2;</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> m_placement.rcNormalPosition.top = wxMulDivInt32(m_placement.rcNormalPosition.top + sizeWndPrev.cy / 2 - m_mntinfo.rcWork.top, sizeWork.cy, sizeWorkPrev.cy) + mntinfo.rcWork.top - sizeWnd.cy / 2;</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> m_placement.rcNormalPosition.right = m_placement.rcNormalPosition.left + sizeWnd.cx;</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> m_placement.rcNormalPosition.bottom = m_placement.rcNormalPosition.top + sizeWnd.cy;</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> </div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <span class="keywordflow">if</span> (!::SetWindowPlacement(hWnd, &amp;m_placement))</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> {</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> wxLogLastError(wxS(<span class="stringliteral">&quot;SetWindowPlacement&quot;</span>));</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> }</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> </div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> }</div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> </div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> GetDPI(_In_ HWND hWnd, _Out_ UINT *dpiHorz, _Out_ UINT *dpiVert)</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> {</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> wxASSERT(dpiHorz);</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> wxASSERT(dpiVert);</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> </div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span><span class="preprocessor">#if wxUSE_DYNLIB_CLASS</span></div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keyword">typedef</span> UINT(WINAPI *GetDpiForWindow_t)(HWND);</div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> s_checkedGetDpiForWindow = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <span class="keyword">static</span> GetDpiForWindow_t s_pfnGetDpiForWindow = NULL;</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">if</span> (!s_checkedGetDpiForWindow &amp;&amp; s_dllUser32.IsLoaded()) {</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> s_pfnGetDpiForWindow = (GetDpiForWindow_t)s_dllUser32.RawGetSymbol(wxT(<span class="stringliteral">&quot;GetDpiForWindow&quot;</span>));</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> s_checkedGetDpiForWindow = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> }</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> </div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">if</span> (s_pfnGetDpiForWindow) {</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> *dpiHorz = *dpiVert = s_pfnGetDpiForWindow(hWnd);</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> }</div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> </div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> *dpiHorz = *dpiVert = USER_DEFAULT_SCREEN_DPI;</div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> }</div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> </div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> GetDPI(_In_ HMONITOR hMonitor, _Out_ UINT *dpiHorz, _Out_ UINT *dpiVert)</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> {</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> wxASSERT(dpiHorz);</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> wxASSERT(dpiVert);</div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> </div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span><span class="preprocessor">#if wxUSE_DYNLIB_CLASS</span></div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keyword">enum</span> MONITOR_DPI_TYPE {</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> MDT_EFFECTIVE_DPI = 0,</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> MDT_ANGULAR_DPI = 1,</div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> MDT_RAW_DPI = 2,</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> MDT_DEFAULT = MDT_EFFECTIVE_DPI</div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> };</div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> <span class="keyword">typedef</span> HRESULT(WINAPI *GetDpiForMonitor_t)(HMONITOR, MONITOR_DPI_TYPE, UINT *, UINT *);</div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> <span class="keyword">static</span> GetDpiForMonitor_t s_pfnGetDpiForMonitor = NULL;</div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">if</span> (!s_pfnGetDpiForMonitor) {</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <span class="keywordflow">if</span> (s_dllShCore.IsLoaded())</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> s_pfnGetDpiForMonitor = (GetDpiForMonitor_t)s_dllShCore.GetSymbol(wxT(<span class="stringliteral">&quot;GetDpiForMonitor&quot;</span>));</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> }</div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> </div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> <span class="keywordflow">if</span> (s_pfnGetDpiForMonitor) {</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> s_pfnGetDpiForMonitor(hMonitor, MDT_DEFAULT, dpiHorz, dpiVert);</div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> }</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> </div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> *dpiHorz = *dpiVert = USER_DEFAULT_SCREEN_DPI;</div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> }</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> </div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> WINDOWPLACEMENT m_placement;</div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> MONITORINFO m_mntinfo;</div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> UINT m_dpiHorz;</div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> UINT m_dpiVert;</div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> </div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span><span class="preprocessor">#if wxUSE_DYNLIB_CLASS</span></div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> <span class="keyword">static</span> wxDynamicLibrary s_dllUser32;</div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> <span class="keyword">static</span> wxDynamicLibrary s_dllShCore;</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span>};</div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> </div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Mon Mar 11 2024 14:56:54 for wxExtend by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0
</small></address>
</body>
</html>