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
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šč | 367620 (26757) | sunniegoldie |
| » | [Android] SplošnoOddelek: Programiranje | 2117 (1247) | piki12 |
| » | Vb 2005 - TextBox - Izračun števila vrstic?Oddelek: Izdelava spletišč | 1717 (1592) | smash |
| » | glow efekt s css v FF / dinamicen width s CSS v FFOddelek: Izdelava spletišč | 1674 (1516) | Lee_Nover |
| » | Kako se tole naredi?Oddelek: Izdelava spletišč | 1612 (1312) | njok |