Forum » Programiranje » [win c++] NONCLIENTMETRICS struktura
[win c++] NONCLIENTMETRICS struktura
zhigatsey ::
Živjo,
Uporabljam Windows Xp SP2 Imam problem pri naslednji kodi, ki sem jo prevedel s
MSVS2008 in z CG C++ Builder 2007 in ne dela nikjer.... Čeprav mi koda v Delphiju
deluje in mislim da zato, ker so pri MS-ju pri Visti malo spremenili strukturo
NONCLIENTMETRICS. Dodali so ji še (int iPaddedBorderWidth)... In to je v BCB compilerju
tudi pravilno deklarirano:
V delphiju pa je struktura definirana še brez iPaddedBorderWidth... in zgleda takole:
Zatorej mi sizeof(NONCLIENTMETRICS) v cpp-ju vrne 344 v delphiju pa 340 in zato mi v delphiju
stvar tudi deluje v cpp pa ne... oz. v cpp-ju bi stvar tudi delovala, če mi ne bi upošteval
še iPaddedBorderWidth... ker #if(WINVER >= 0x0600) mi vrne true... Torej zakaj mi prevajalnik
sam ne pogrunta pravega os-a ki ga uporabljam v mojem primeru win xp torej WINVER 0x0501?
Hvala za odgovore
Uporabljam Windows Xp SP2 Imam problem pri naslednji kodi, ki sem jo prevedel s
MSVS2008 in z CG C++ Builder 2007 in ne dela nikjer.... Čeprav mi koda v Delphiju
deluje in mislim da zato, ker so pri MS-ju pri Visti malo spremenili strukturo
NONCLIENTMETRICS. Dodali so ji še (int iPaddedBorderWidth)... In to je v BCB compilerju
tudi pravilno deklarirano:
typedef struct tagNONCLIENTMETRICSA { UINT cbSize; int iBorderWidth; int iScrollWidth; int iScrollHeight; int iCaptionWidth; int iCaptionHeight; LOGFONTA lfCaptionFont; int iSmCaptionWidth; int iSmCaptionHeight; LOGFONTA lfSmCaptionFont; int iMenuWidth; int iMenuHeight; LOGFONTA lfMenuFont; LOGFONTA lfStatusFont; LOGFONTA lfMessageFont; #if(WINVER >= 0x0600) int iPaddedBorderWidth; #endif /* WINVER >= 0x0600 */
V delphiju pa je struktura definirana še brez iPaddedBorderWidth... in zgleda takole:
tagNONCLIENTMETRICSA = packed record cbSize: UINT; iBorderWidth: Integer; iScrollWidth: Integer; iScrollHeight: Integer; iCaptionWidth: Integer; iCaptionHeight: Integer; lfCaptionFont: TLogFontA; iSmCaptionWidth: Integer; iSmCaptionHeight: Integer; lfSmCaptionFont: TLogFontA; iMenuWidth: Integer; iMenuHeight: Integer; lfMenuFont: TLogFontA; lfStatusFont: TLogFontA; lfMessageFont: TLogFontA; end;
Zatorej mi sizeof(NONCLIENTMETRICS) v cpp-ju vrne 344 v delphiju pa 340 in zato mi v delphiju
stvar tudi deluje v cpp pa ne... oz. v cpp-ju bi stvar tudi delovala, če mi ne bi upošteval
še iPaddedBorderWidth... ker #if(WINVER >= 0x0600) mi vrne true... Torej zakaj mi prevajalnik
sam ne pogrunta pravega os-a ki ga uporabljam v mojem primeru win xp torej WINVER 0x0501?
#include "stdafx.h" #include <windows.h> #include <iostream> int main(int argc, char* argv[]) { NONCLIENTMETRICS ncm; memset(&ncm, 0, sizeof(NONCLIENTMETRICS)); ncm.cbSize = sizeof(NONCLIENTMETRICS); #if(WINVER >= 0x0600) std::cout << "Ali uporabljam visto ali kako?" << std::endl; #endif if ( SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0) ) { std::cout << "Yes" << std::endl; } else { std::cout << "No" << std::endl; } system("PAUSE"); return 0; }
Hvala za odgovore
- spremenil: zhigatsey ()
BlueRunner ::
Zato, ker lahko na (skoraj) poljubni verziji oken prevajaš programe za (skoraj) poljubno drugo verzijo oken. Prevajanja pač != zaganjanje.
Programerjeva odgovornost je, da sam določi WINVER, ker se s tem zavaruje pred nenamerno uporabo API-jev, ki spadajo v višjo verzijo oken, kot jih pa za svojo aplikacijo zahteva.
Programerjeva odgovornost je, da sam določi WINVER, ker se s tem zavaruje pred nenamerno uporabo API-jev, ki spadajo v višjo verzijo oken, kot jih pa za svojo aplikacijo zahteva.
zhigatsey ::
Uf v ta WINVER in WIN32_WINNT, se nikoli nisem prav poglabljal, res pa je da tudi z WINAPI nisem imel še dosti
opravka... Zdaj deluje in stvar je čisto logična:)... Pri MSVS2008 sem v stdafx dodal nove define stavke, pri CG C++ Builder pa obstaja nastavitev Windows Version Target... Sicer pa ne vem zakaj je po defaultu WINVER nastavljen na najvišjo vrednost...
opravka... Zdaj deluje in stvar je čisto logična:)... Pri MSVS2008 sem v stdafx dodal nove define stavke, pri CG C++ Builder pa obstaja nastavitev Windows Version Target... Sicer pa ne vem zakaj je po defaultu WINVER nastavljen na najvišjo vrednost...
Zgodovina sprememb…
- spremenil: zhigatsey ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
! | Vse, kar ste si želeli vprašati o CSS, pa si niste upali. (strani: 1 2 3 4 … 23 24 25 26 )Oddelek: Izdelava spletišč | 347469 (6606) | sunniegoldie |
» | [Android] SplošnoOddelek: Programiranje | 2013 (1143) | piki12 |
» | Vb 2005 - TextBox - Izračun števila vrstic?Oddelek: Izdelava spletišč | 1615 (1490) | smash |
» | glow efekt s css v FF / dinamicen width s CSS v FFOddelek: Izdelava spletišč | 1569 (1411) | Lee_Nover |
» | Kako se tole naredi?Oddelek: Izdelava spletišč | 1508 (1208) | njok |