Accessing MONITORINFOEX values in Visual C++
I'm perplexed trying to retrieve MONITORINFOEX values. I tried:
typedef struct tagMONITORINFO
DWORD cbSize;
RECT rcMonitor;
RECT rcWork;
DWORD dwFlags;
MONITORINFO, *LPMONITORINFO;
typedef struct tagMONITORINFOEX
CHAR szDevice[CCHDEVICENAME];
MONITORINFO tagMONITORINFO;
MONITORINFOEX, *LPMONITORINFOEX;
MONITORINFOEX miea;
miea.tagMONITORINFO.cbSize = sizeof(MONITORINFOEX);
GetMonitorInfo(hMonitor, (&miea));
to no avail. I modified the last line to:
GetMonitorInfo(hMonitor, ((LPMONITORINFO) &miea));
again, no luck. I get compiler messages about the 2nd parameter of GetMonitorInfo.
Perhaps my recent inexperience with C++ is showing.
Thanks in advance for any help you may provide.
c++ winapi
|
show 1 more comment
I'm perplexed trying to retrieve MONITORINFOEX values. I tried:
typedef struct tagMONITORINFO
DWORD cbSize;
RECT rcMonitor;
RECT rcWork;
DWORD dwFlags;
MONITORINFO, *LPMONITORINFO;
typedef struct tagMONITORINFOEX
CHAR szDevice[CCHDEVICENAME];
MONITORINFO tagMONITORINFO;
MONITORINFOEX, *LPMONITORINFOEX;
MONITORINFOEX miea;
miea.tagMONITORINFO.cbSize = sizeof(MONITORINFOEX);
GetMonitorInfo(hMonitor, (&miea));
to no avail. I modified the last line to:
GetMonitorInfo(hMonitor, ((LPMONITORINFO) &miea));
again, no luck. I get compiler messages about the 2nd parameter of GetMonitorInfo.
Perhaps my recent inexperience with C++ is showing.
Thanks in advance for any help you may provide.
c++ winapi
1
Why do you redefine the structures? Why not include the proper Windows header files and use the standard structures? And what is your problem with the code you show? Do you get build errors? Runtime errors or crashes? Invalid results?
– Some programmer dude
Nov 13 '18 at 13:20
I get compiler messages about the 2nd parameter of GetMonitorInfo. Add the error messages to the question.
– Johnny Mopp
Nov 13 '18 at 13:24
your definition ofMONITORINFOEX
is wrong. and anyway - it defined in MultiMon.h -struct tagMONITORINFOEXA : public tagMONITORINFO CHAR szDevice[CCHDEVICENAME]; MONITORINFOEXA, *LPMONITORINFOEXA;
– RbMm
Nov 13 '18 at 13:32
@som: It's only a redefinition, if you actually include the header files that define the structures. While common, there are reasons why you'd want to define those structures yourself. A library may not want to#include <Windows.h>
, and rather define what it needs. C++/WinRT recently removed the dependency on Windows.h, for example.
– IInspectable
Nov 13 '18 at 17:04
@IInspectable It would be a redefinition if the structures were a byte-by-byte, character by character, exact duplicate. Otherwise it's undefined behavior as it breaks the one definition rule. And in this case it apparently isn't exact duplicates.
– Some programmer dude
Nov 13 '18 at 17:28
|
show 1 more comment
I'm perplexed trying to retrieve MONITORINFOEX values. I tried:
typedef struct tagMONITORINFO
DWORD cbSize;
RECT rcMonitor;
RECT rcWork;
DWORD dwFlags;
MONITORINFO, *LPMONITORINFO;
typedef struct tagMONITORINFOEX
CHAR szDevice[CCHDEVICENAME];
MONITORINFO tagMONITORINFO;
MONITORINFOEX, *LPMONITORINFOEX;
MONITORINFOEX miea;
miea.tagMONITORINFO.cbSize = sizeof(MONITORINFOEX);
GetMonitorInfo(hMonitor, (&miea));
to no avail. I modified the last line to:
GetMonitorInfo(hMonitor, ((LPMONITORINFO) &miea));
again, no luck. I get compiler messages about the 2nd parameter of GetMonitorInfo.
Perhaps my recent inexperience with C++ is showing.
Thanks in advance for any help you may provide.
c++ winapi
I'm perplexed trying to retrieve MONITORINFOEX values. I tried:
typedef struct tagMONITORINFO
DWORD cbSize;
RECT rcMonitor;
RECT rcWork;
DWORD dwFlags;
MONITORINFO, *LPMONITORINFO;
typedef struct tagMONITORINFOEX
CHAR szDevice[CCHDEVICENAME];
MONITORINFO tagMONITORINFO;
MONITORINFOEX, *LPMONITORINFOEX;
MONITORINFOEX miea;
miea.tagMONITORINFO.cbSize = sizeof(MONITORINFOEX);
GetMonitorInfo(hMonitor, (&miea));
to no avail. I modified the last line to:
GetMonitorInfo(hMonitor, ((LPMONITORINFO) &miea));
again, no luck. I get compiler messages about the 2nd parameter of GetMonitorInfo.
Perhaps my recent inexperience with C++ is showing.
Thanks in advance for any help you may provide.
c++ winapi
c++ winapi
asked Nov 13 '18 at 13:18
John-L_.John-L_.
66
66
1
Why do you redefine the structures? Why not include the proper Windows header files and use the standard structures? And what is your problem with the code you show? Do you get build errors? Runtime errors or crashes? Invalid results?
– Some programmer dude
Nov 13 '18 at 13:20
I get compiler messages about the 2nd parameter of GetMonitorInfo. Add the error messages to the question.
– Johnny Mopp
Nov 13 '18 at 13:24
your definition ofMONITORINFOEX
is wrong. and anyway - it defined in MultiMon.h -struct tagMONITORINFOEXA : public tagMONITORINFO CHAR szDevice[CCHDEVICENAME]; MONITORINFOEXA, *LPMONITORINFOEXA;
– RbMm
Nov 13 '18 at 13:32
@som: It's only a redefinition, if you actually include the header files that define the structures. While common, there are reasons why you'd want to define those structures yourself. A library may not want to#include <Windows.h>
, and rather define what it needs. C++/WinRT recently removed the dependency on Windows.h, for example.
– IInspectable
Nov 13 '18 at 17:04
@IInspectable It would be a redefinition if the structures were a byte-by-byte, character by character, exact duplicate. Otherwise it's undefined behavior as it breaks the one definition rule. And in this case it apparently isn't exact duplicates.
– Some programmer dude
Nov 13 '18 at 17:28
|
show 1 more comment
1
Why do you redefine the structures? Why not include the proper Windows header files and use the standard structures? And what is your problem with the code you show? Do you get build errors? Runtime errors or crashes? Invalid results?
– Some programmer dude
Nov 13 '18 at 13:20
I get compiler messages about the 2nd parameter of GetMonitorInfo. Add the error messages to the question.
– Johnny Mopp
Nov 13 '18 at 13:24
your definition ofMONITORINFOEX
is wrong. and anyway - it defined in MultiMon.h -struct tagMONITORINFOEXA : public tagMONITORINFO CHAR szDevice[CCHDEVICENAME]; MONITORINFOEXA, *LPMONITORINFOEXA;
– RbMm
Nov 13 '18 at 13:32
@som: It's only a redefinition, if you actually include the header files that define the structures. While common, there are reasons why you'd want to define those structures yourself. A library may not want to#include <Windows.h>
, and rather define what it needs. C++/WinRT recently removed the dependency on Windows.h, for example.
– IInspectable
Nov 13 '18 at 17:04
@IInspectable It would be a redefinition if the structures were a byte-by-byte, character by character, exact duplicate. Otherwise it's undefined behavior as it breaks the one definition rule. And in this case it apparently isn't exact duplicates.
– Some programmer dude
Nov 13 '18 at 17:28
1
1
Why do you redefine the structures? Why not include the proper Windows header files and use the standard structures? And what is your problem with the code you show? Do you get build errors? Runtime errors or crashes? Invalid results?
– Some programmer dude
Nov 13 '18 at 13:20
Why do you redefine the structures? Why not include the proper Windows header files and use the standard structures? And what is your problem with the code you show? Do you get build errors? Runtime errors or crashes? Invalid results?
– Some programmer dude
Nov 13 '18 at 13:20
I get compiler messages about the 2nd parameter of GetMonitorInfo. Add the error messages to the question.
– Johnny Mopp
Nov 13 '18 at 13:24
I get compiler messages about the 2nd parameter of GetMonitorInfo. Add the error messages to the question.
– Johnny Mopp
Nov 13 '18 at 13:24
your definition of
MONITORINFOEX
is wrong. and anyway - it defined in MultiMon.h - struct tagMONITORINFOEXA : public tagMONITORINFO CHAR szDevice[CCHDEVICENAME]; MONITORINFOEXA, *LPMONITORINFOEXA;
– RbMm
Nov 13 '18 at 13:32
your definition of
MONITORINFOEX
is wrong. and anyway - it defined in MultiMon.h - struct tagMONITORINFOEXA : public tagMONITORINFO CHAR szDevice[CCHDEVICENAME]; MONITORINFOEXA, *LPMONITORINFOEXA;
– RbMm
Nov 13 '18 at 13:32
@som: It's only a redefinition, if you actually include the header files that define the structures. While common, there are reasons why you'd want to define those structures yourself. A library may not want to
#include <Windows.h>
, and rather define what it needs. C++/WinRT recently removed the dependency on Windows.h, for example.– IInspectable
Nov 13 '18 at 17:04
@som: It's only a redefinition, if you actually include the header files that define the structures. While common, there are reasons why you'd want to define those structures yourself. A library may not want to
#include <Windows.h>
, and rather define what it needs. C++/WinRT recently removed the dependency on Windows.h, for example.– IInspectable
Nov 13 '18 at 17:04
@IInspectable It would be a redefinition if the structures were a byte-by-byte, character by character, exact duplicate. Otherwise it's undefined behavior as it breaks the one definition rule. And in this case it apparently isn't exact duplicates.
– Some programmer dude
Nov 13 '18 at 17:28
@IInspectable It would be a redefinition if the structures were a byte-by-byte, character by character, exact duplicate. Otherwise it's undefined behavior as it breaks the one definition rule. And in this case it apparently isn't exact duplicates.
– Some programmer dude
Nov 13 '18 at 17:28
|
show 1 more comment
1 Answer
1
active
oldest
votes
In the code you have shown you try to define struct
s that are part of WinAPI yourself. Don't do that, there is no need to. Include the appropriate header files instead.
Simple sample:
#include <cstdlib>
#include <iostream>
#include <windows.h>
int main()
// just a cheap way to get a handle
auto monitor MonitorFromWindow(GetConsoleWindow(), MONITOR_DEFAULTTONEAREST) ;
MONITORINFOEXW miex sizeof miex ; // set cbSize member
if (!GetMonitorInfoW(monitor, &miex))
std::cerr << "GetMonitorInfo() failed :(nn";
return EXIT_FAILURE;
std::wcout << miex.szDevice << ": "
<< miex.rcMonitor.right - miex.rcMonitor.left << " x "
<< miex.rcMonitor.bottom - miex.rcMonitor.top << 'n';
Sample output:
\.DISPLAY1: 2560 x 1440
1
not needstatic_cast<LPMONITORINFO>(&miex)
can simply use&miex
becauseMONITORINFOEXW : public MONITORINFO
– RbMm
Nov 13 '18 at 13:40
@RbMm Right. Was a little surprised though since most WinAPI structs don't use inheritance.
– Swordfish
Nov 13 '18 at 13:45
The winapi targets the C language, not C++. I think the core advice is that the OP must not declare the structs by himself, that's not going to end well since these identifiers are macros and not structs. Be sure to point that out.
– Hans Passant
Nov 13 '18 at 14:02
@HansPassant "The winapi targets the C language, not C++." thats why i was surprised.
– Swordfish
Nov 13 '18 at 14:06
MONITORINFOEX
deriving fromMONITORINFO
is wrapped in a#ifdef __cplusplus
preprocessor guard. The C implementation uses composition, whereMONITORINFO
is the first member ofMONITORINFOEX
. The entirety of the Windows API (and Windows Runtime) is still exposed as a C interface, with occasional convenience wrappers and declarations in C++.
– IInspectable
Nov 13 '18 at 17:26
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53281896%2faccessing-monitorinfoex-values-in-visual-c%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
In the code you have shown you try to define struct
s that are part of WinAPI yourself. Don't do that, there is no need to. Include the appropriate header files instead.
Simple sample:
#include <cstdlib>
#include <iostream>
#include <windows.h>
int main()
// just a cheap way to get a handle
auto monitor MonitorFromWindow(GetConsoleWindow(), MONITOR_DEFAULTTONEAREST) ;
MONITORINFOEXW miex sizeof miex ; // set cbSize member
if (!GetMonitorInfoW(monitor, &miex))
std::cerr << "GetMonitorInfo() failed :(nn";
return EXIT_FAILURE;
std::wcout << miex.szDevice << ": "
<< miex.rcMonitor.right - miex.rcMonitor.left << " x "
<< miex.rcMonitor.bottom - miex.rcMonitor.top << 'n';
Sample output:
\.DISPLAY1: 2560 x 1440
1
not needstatic_cast<LPMONITORINFO>(&miex)
can simply use&miex
becauseMONITORINFOEXW : public MONITORINFO
– RbMm
Nov 13 '18 at 13:40
@RbMm Right. Was a little surprised though since most WinAPI structs don't use inheritance.
– Swordfish
Nov 13 '18 at 13:45
The winapi targets the C language, not C++. I think the core advice is that the OP must not declare the structs by himself, that's not going to end well since these identifiers are macros and not structs. Be sure to point that out.
– Hans Passant
Nov 13 '18 at 14:02
@HansPassant "The winapi targets the C language, not C++." thats why i was surprised.
– Swordfish
Nov 13 '18 at 14:06
MONITORINFOEX
deriving fromMONITORINFO
is wrapped in a#ifdef __cplusplus
preprocessor guard. The C implementation uses composition, whereMONITORINFO
is the first member ofMONITORINFOEX
. The entirety of the Windows API (and Windows Runtime) is still exposed as a C interface, with occasional convenience wrappers and declarations in C++.
– IInspectable
Nov 13 '18 at 17:26
add a comment |
In the code you have shown you try to define struct
s that are part of WinAPI yourself. Don't do that, there is no need to. Include the appropriate header files instead.
Simple sample:
#include <cstdlib>
#include <iostream>
#include <windows.h>
int main()
// just a cheap way to get a handle
auto monitor MonitorFromWindow(GetConsoleWindow(), MONITOR_DEFAULTTONEAREST) ;
MONITORINFOEXW miex sizeof miex ; // set cbSize member
if (!GetMonitorInfoW(monitor, &miex))
std::cerr << "GetMonitorInfo() failed :(nn";
return EXIT_FAILURE;
std::wcout << miex.szDevice << ": "
<< miex.rcMonitor.right - miex.rcMonitor.left << " x "
<< miex.rcMonitor.bottom - miex.rcMonitor.top << 'n';
Sample output:
\.DISPLAY1: 2560 x 1440
1
not needstatic_cast<LPMONITORINFO>(&miex)
can simply use&miex
becauseMONITORINFOEXW : public MONITORINFO
– RbMm
Nov 13 '18 at 13:40
@RbMm Right. Was a little surprised though since most WinAPI structs don't use inheritance.
– Swordfish
Nov 13 '18 at 13:45
The winapi targets the C language, not C++. I think the core advice is that the OP must not declare the structs by himself, that's not going to end well since these identifiers are macros and not structs. Be sure to point that out.
– Hans Passant
Nov 13 '18 at 14:02
@HansPassant "The winapi targets the C language, not C++." thats why i was surprised.
– Swordfish
Nov 13 '18 at 14:06
MONITORINFOEX
deriving fromMONITORINFO
is wrapped in a#ifdef __cplusplus
preprocessor guard. The C implementation uses composition, whereMONITORINFO
is the first member ofMONITORINFOEX
. The entirety of the Windows API (and Windows Runtime) is still exposed as a C interface, with occasional convenience wrappers and declarations in C++.
– IInspectable
Nov 13 '18 at 17:26
add a comment |
In the code you have shown you try to define struct
s that are part of WinAPI yourself. Don't do that, there is no need to. Include the appropriate header files instead.
Simple sample:
#include <cstdlib>
#include <iostream>
#include <windows.h>
int main()
// just a cheap way to get a handle
auto monitor MonitorFromWindow(GetConsoleWindow(), MONITOR_DEFAULTTONEAREST) ;
MONITORINFOEXW miex sizeof miex ; // set cbSize member
if (!GetMonitorInfoW(monitor, &miex))
std::cerr << "GetMonitorInfo() failed :(nn";
return EXIT_FAILURE;
std::wcout << miex.szDevice << ": "
<< miex.rcMonitor.right - miex.rcMonitor.left << " x "
<< miex.rcMonitor.bottom - miex.rcMonitor.top << 'n';
Sample output:
\.DISPLAY1: 2560 x 1440
In the code you have shown you try to define struct
s that are part of WinAPI yourself. Don't do that, there is no need to. Include the appropriate header files instead.
Simple sample:
#include <cstdlib>
#include <iostream>
#include <windows.h>
int main()
// just a cheap way to get a handle
auto monitor MonitorFromWindow(GetConsoleWindow(), MONITOR_DEFAULTTONEAREST) ;
MONITORINFOEXW miex sizeof miex ; // set cbSize member
if (!GetMonitorInfoW(monitor, &miex))
std::cerr << "GetMonitorInfo() failed :(nn";
return EXIT_FAILURE;
std::wcout << miex.szDevice << ": "
<< miex.rcMonitor.right - miex.rcMonitor.left << " x "
<< miex.rcMonitor.bottom - miex.rcMonitor.top << 'n';
Sample output:
\.DISPLAY1: 2560 x 1440
edited Nov 13 '18 at 14:05
answered Nov 13 '18 at 13:30
SwordfishSwordfish
9,19511335
9,19511335
1
not needstatic_cast<LPMONITORINFO>(&miex)
can simply use&miex
becauseMONITORINFOEXW : public MONITORINFO
– RbMm
Nov 13 '18 at 13:40
@RbMm Right. Was a little surprised though since most WinAPI structs don't use inheritance.
– Swordfish
Nov 13 '18 at 13:45
The winapi targets the C language, not C++. I think the core advice is that the OP must not declare the structs by himself, that's not going to end well since these identifiers are macros and not structs. Be sure to point that out.
– Hans Passant
Nov 13 '18 at 14:02
@HansPassant "The winapi targets the C language, not C++." thats why i was surprised.
– Swordfish
Nov 13 '18 at 14:06
MONITORINFOEX
deriving fromMONITORINFO
is wrapped in a#ifdef __cplusplus
preprocessor guard. The C implementation uses composition, whereMONITORINFO
is the first member ofMONITORINFOEX
. The entirety of the Windows API (and Windows Runtime) is still exposed as a C interface, with occasional convenience wrappers and declarations in C++.
– IInspectable
Nov 13 '18 at 17:26
add a comment |
1
not needstatic_cast<LPMONITORINFO>(&miex)
can simply use&miex
becauseMONITORINFOEXW : public MONITORINFO
– RbMm
Nov 13 '18 at 13:40
@RbMm Right. Was a little surprised though since most WinAPI structs don't use inheritance.
– Swordfish
Nov 13 '18 at 13:45
The winapi targets the C language, not C++. I think the core advice is that the OP must not declare the structs by himself, that's not going to end well since these identifiers are macros and not structs. Be sure to point that out.
– Hans Passant
Nov 13 '18 at 14:02
@HansPassant "The winapi targets the C language, not C++." thats why i was surprised.
– Swordfish
Nov 13 '18 at 14:06
MONITORINFOEX
deriving fromMONITORINFO
is wrapped in a#ifdef __cplusplus
preprocessor guard. The C implementation uses composition, whereMONITORINFO
is the first member ofMONITORINFOEX
. The entirety of the Windows API (and Windows Runtime) is still exposed as a C interface, with occasional convenience wrappers and declarations in C++.
– IInspectable
Nov 13 '18 at 17:26
1
1
not need
static_cast<LPMONITORINFO>(&miex)
can simply use &miex
because MONITORINFOEXW : public MONITORINFO
– RbMm
Nov 13 '18 at 13:40
not need
static_cast<LPMONITORINFO>(&miex)
can simply use &miex
because MONITORINFOEXW : public MONITORINFO
– RbMm
Nov 13 '18 at 13:40
@RbMm Right. Was a little surprised though since most WinAPI structs don't use inheritance.
– Swordfish
Nov 13 '18 at 13:45
@RbMm Right. Was a little surprised though since most WinAPI structs don't use inheritance.
– Swordfish
Nov 13 '18 at 13:45
The winapi targets the C language, not C++. I think the core advice is that the OP must not declare the structs by himself, that's not going to end well since these identifiers are macros and not structs. Be sure to point that out.
– Hans Passant
Nov 13 '18 at 14:02
The winapi targets the C language, not C++. I think the core advice is that the OP must not declare the structs by himself, that's not going to end well since these identifiers are macros and not structs. Be sure to point that out.
– Hans Passant
Nov 13 '18 at 14:02
@HansPassant "The winapi targets the C language, not C++." thats why i was surprised.
– Swordfish
Nov 13 '18 at 14:06
@HansPassant "The winapi targets the C language, not C++." thats why i was surprised.
– Swordfish
Nov 13 '18 at 14:06
MONITORINFOEX
deriving from MONITORINFO
is wrapped in a #ifdef __cplusplus
preprocessor guard. The C implementation uses composition, where MONITORINFO
is the first member of MONITORINFOEX
. The entirety of the Windows API (and Windows Runtime) is still exposed as a C interface, with occasional convenience wrappers and declarations in C++.– IInspectable
Nov 13 '18 at 17:26
MONITORINFOEX
deriving from MONITORINFO
is wrapped in a #ifdef __cplusplus
preprocessor guard. The C implementation uses composition, where MONITORINFO
is the first member of MONITORINFOEX
. The entirety of the Windows API (and Windows Runtime) is still exposed as a C interface, with occasional convenience wrappers and declarations in C++.– IInspectable
Nov 13 '18 at 17:26
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53281896%2faccessing-monitorinfoex-values-in-visual-c%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Why do you redefine the structures? Why not include the proper Windows header files and use the standard structures? And what is your problem with the code you show? Do you get build errors? Runtime errors or crashes? Invalid results?
– Some programmer dude
Nov 13 '18 at 13:20
I get compiler messages about the 2nd parameter of GetMonitorInfo. Add the error messages to the question.
– Johnny Mopp
Nov 13 '18 at 13:24
your definition of
MONITORINFOEX
is wrong. and anyway - it defined in MultiMon.h -struct tagMONITORINFOEXA : public tagMONITORINFO CHAR szDevice[CCHDEVICENAME]; MONITORINFOEXA, *LPMONITORINFOEXA;
– RbMm
Nov 13 '18 at 13:32
@som: It's only a redefinition, if you actually include the header files that define the structures. While common, there are reasons why you'd want to define those structures yourself. A library may not want to
#include <Windows.h>
, and rather define what it needs. C++/WinRT recently removed the dependency on Windows.h, for example.– IInspectable
Nov 13 '18 at 17:04
@IInspectable It would be a redefinition if the structures were a byte-by-byte, character by character, exact duplicate. Otherwise it's undefined behavior as it breaks the one definition rule. And in this case it apparently isn't exact duplicates.
– Some programmer dude
Nov 13 '18 at 17:28