Domanda

Sto cercando di utilizzare il seguente per ottenere l'altezza e la larghezza del display principale:

#include <winuser.h>
size_t width = (size_t)GetSystemMetrics(SM_CXBORDER);
size_t height = (size_t)GetSystemMetrics(SM_CYBORDER);

Tuttavia, è in mancanza su un errore di collegamento esterni non risolti (LNK1120). Ho provato il collegamento al user32.lib (come documentato qui ), e ha ricevuto lo stesso errore, così come il collegamento a wmbase.lib (come documentato qui ), e ha ricevuto l'errore che wmbase.lib non esiste! Che cosa sto facendo di sbagliato?

Si noti che Io uso solo plain-ol' C - Non C ++. E 'questa la giusta funzione da utilizzare per ottenere la risoluzione dello schermo (in pixel) del display principale?

sto cercando di compilare questo sul MSVC al momento, ma preferirei una soluzione portatile per altri compilatori.

Grazie.

Modifica

Quindi sembra che i parametri che cercavo erano SM_CXSCREEN e SM_CYSCREEN, non SM_CXBORDER e SM_CYBORDER. Tuttavia, ancora non riesco a ottenere questo per compilare.

Ecco l'errore effettivo se questo chiarisce nulla (se collegato ad user32.lib):

screen.obj : error LNK2019: unresolved external symbol __imp__GetSystemMetrics@4 referenced in function _getMainDisplaySize
build\lib.win32-2.6\foomodule\bitmap.pyd : fatal error LNK1120: 1 unresolved externals
error: command '"C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\link.exe"' failed with exit status 1120

(Sto tentando di compilare un modulo Python / C in modo che questo che si vede le directory strane)

È stato utile?

Soluzione

Si vuole #include <windows.h> invece di <winuser.h>. Come-si, probabilmente ottenendo alcuni dei modificatori sul prototipo sbagliato così com'è.

Modifica: dal momento che si continui ad avere problemi, forse possiamo cominciare con un test semplificato e vedere quello che si ottiene. Fortunatamente, GetSystemMetrics() non ha bisogno di un handle di finestra o di qualcosa di così e possono chiamare da una semplice applicazione console:

#include <windows.h>
#include <iostream>

int main() { 
    size_t width = (size_t)GetSystemMetrics(SM_CXSCREEN);
    size_t height = (size_t)GetSystemMetrics(SM_CYSCREEN);

    std::cout << "width = " << width << "\n";
    std::cout << "height = " << height << std::endl; 
    return 0;
}

Ecco un dump dello schermo di compilazione e l'esecuzione di questo:

D:\C\source>cl screen_res.cpp user32.lib
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

screen_res.cpp
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:screen_res.exe
screen_res.obj
user32.lib

D:\C\source>screen_res
width = 1600
height = 1200

Se questo non compilare ed eseguire, probabilmente hai un problema con l'installazione. Se lo fa, allora il problema è probabilmente da qualche parte nel progetto su cui stai lavorando.

Altri suggerimenti

Questo non aiuterà con il tuo errore di collegamento, ma si domanda anche se questo è il modo giusto per ottenere la dimensione del display. I params si sta passando a GetSystemMetrics non tornerà quello che vuoi. Controllare le bandiere disponibili presso il documentazione . Anche considerare l'utilizzo SystemParametersInfo . Quale chiamare da utilizzare dipende dal contesto di che cosa esattamente si sta cercando di trovare -. Dimensione del monitor vs workarea, etc

La soluzione è quella di definire sia COMPILE_MULTIMON_STUBS in uno dei moduli.

#define COMPILE_MULTIMON_STUBS
#include <multimon.h>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top