Gå til innhold

C++ lage dialogbox


Anbefalte innlegg

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

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hprevInst, LPSTR args, int ncmdshow)
{
OSVERSIONINFOEX info;
     ZeroMemory(&info, sizeof(OSVERSIONINFOEX));
     info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
     GetVersionEx((LPOSVERSIONINFO)&info);//info requires typecasting
    
	 MessageBox(NULL, (LPCSTR) "Windowsversion:"+ info.dwMajorVersion + info.dwMinorVersion,  
	 "Winver" + info.dwMajorVersion + info.dwMinorVersion, MB_OK | MB_ICONQUESTION);
 	 return 0;

     

      // printf("Windows version: %u.%u\n", info.dwMajorVersion, info.dwMinorVersion);

}

Hvordan får man å fikse størrelsen på dialogboxen og får informasjon om windows versjonen?

Om noen vet om koden kan justeres for OSX og Linux støtte ville det være flott.

Lenke til kommentar
Videoannonse
Annonse

Hei!

 

Tror du bør lese litt mer om hvordan C (og C++) fungerer. F.eks. i C betyr ikke "abc" + 123 at man setter disse sammen til "abc123". Det betyr at du adderer 123 til en peker (pointer) til "abc" slik at resultatet er en peker til et annet område i minnet og ikke strengen din.

 

Koden din er forresten hovedsakelig skrevet i C, ikke C++. Den er også skrevet direkte mot Windows API-et. Du må bruke de plattform-spesifikke API-ene eller bruke et tredjepartsbibliotek som abstraherer bort dette slik at du koder mot ett API som fungerer på tvers av plattformer. Du kan sikkert få koden din (når du har fikset bugs) til å virke både på macOS og Linux via Wine eller noe men jeg vil anbefale at du heller gjør det ordentlig.

Endret av ahw_
  • Liker 4
Lenke til kommentar

Kanskje jeg blander språkene, python og java er mye enklere.

 

Prøver meg på ligdene i linux.

Tror du bør gi noen eksempler på hvordan jeg bør gjøre det, er utrolig vanskelig å forstå ting man finner på youtube\forum og generielt. Så er vel lett å se for dyktige utviklere jeg er på bærtur.

 

Hva slags verktøy bør brukes til C++ og C? Codeblock funger dårlig i windows, prøver meg på Dev c++  5.11 og QT creator, har prøvd meg på Virtual studio og virtual studio code. Men er mye dårlig verktøy for c.

#include <iostream>
#include <stdio.h>
#ifndef DWORD
#define WINAPI
typedef unsigned long DWORD;
typedef short WCHAR;
typedef void * HANDLE;
#define MAX_PATH    PATH_MAX
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned int BOOL;
#endif

   struct utsname
   {
       char sysname[];    /* Operating system name (e.g., "Linux") */
       char nodename[];   /* Name within "some implementation-defined network" */
       char release[];    /* OS release (e.g., "2.6.28") */
       char version[];    /* OS version */
       char machine[];    /* Hardware identifier */
       #ifdef _GNU_SOURCE
          char domainname[]; /* NIS or YP domain name */
       #endif
QMessageBox mb(QMessageBox::Question, "Linuxversion" + sysname[] + version[], "Linux-version" + sysname[] + version[],  QMessageBox::Ok | QMessageBox::Cancel);
if(mb.exec() == QMessageBox::Ok) { do_stuff(); }

      // printf("Windows version: %u.%u\n", info.dwMajorVersion, info.dwMinorVersion);

};

Endret av LMH1
Lenke til kommentar

Du kan sikkert få koden din (når du har fikset bugs) til å virke både på macOS og Linux via Wine eller noe men jeg vil anbefale at du heller gjør det ordentlig.

Tenker du på ligdene:

#ifdef _WIN32
   //define something for Windows (32-bit and 64-bit, this part is common)
   #ifdef _WIN64
      //define something for Windows (64-bit only)
   #else
      //define something for Windows (32-bit only)
   #endif
#elif __APPLE__
    #include "TargetConditionals.h"
    #if TARGET_IPHONE_SIMULATOR
         // iOS Simulator
    #elif TARGET_OS_IPHONE
        // iOS device
    #elif TARGET_OS_MAC
        // Other kinds of Mac OS
    #else
    #   error "Unknown Apple platform"
    #endif
#elif __linux__
    // linux
#elif __unix__ // all unices not caught above
    // Unix
#elif defined(_POSIX_VERSION)
    // POSIX
#else
#   error "Unknown compiler"
#endif

Jobber med ligdene, men først må jeg få det å fungere slik jeg vil.

Lenke til kommentar

Når jeg koder i C/C++ på Windows så bruker jeg Visual Studio, og på macOS bruker jeg Xcode. Jeg bruker IntelliJ IDEA til Java og Visual Studio Code til alt annet (C og C++ også hvis jeg ikke gidder å starte opp VS). Du kan f.eks. se på IntelliJ CLion som også funker på Linux. Qt Creator er også greit hvis du likevel skal bruke Qt, så unngår du en del arbeid med oppsett.

 

Jeg tenker at du bør starte med den enkleste koden som fungerer først. Få hver ting til å fungere selvstending før du integrerer disse.

 

Hvis du skal kode direkte mot hvert plattform-spesifikke API så kan du regne med å skrive en del kode som over (#ifdef). Dette bør selvsagt gjøres på en ryddig måte.

 

Regner med du blir å ta i bruk diverse tredjepartsbiblioteker etter hvert. Dette er et av marerittene med C/C++ fordi det ikke finnes noen standard verktøy for å håndtere biblioteker. Jeg bruker Conan til dette som fungerer bedre en diverse annet jeg har prøvd, men det finnes mange slike verktøy.

 

Jeg bruker selv vanligvis UI-bibliotekene wxWidgets eller Qt fordi begge har greie verktøy for å lage UI (wxFormBuilder og Qt Designer).

 

Med «Wine» mente jeg dette: https://www.winehq.org/

 

Wine oversetter API-kall for Windows til f.eks. macOS og Linux så godt som den kan. Har selv et større prosjekt som noen fans overraskende nok fikk til å fungere på macOS med Wineskin, men ikke helt fritt for glitches. Dette er ikke noe du bør satse på.

  • Liker 1
Lenke til kommentar

 

std::string message= "Winver: " + std::to_string(info.dwMajorVersion);

     std::string tittel = "Windowsversjon:";

     

    

     MessageBox(

     NULL,

     (LPCSTR) message.c_str(),

     (LPCSTR) tittel.c_str(),

Fant ut å endre dette, hjelper det mye bedre.

OSVERSIONINFOEX info;
     ZeroMemory(&info, sizeof(OSVERSIONINFOEX));
     info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
     GetVersionEx((LPOSVERSIONINFO)&info);//info requires typecasting

Hvordan får man denne og gi: windows 10 versjon 1809 build 17763.503.

Er det snakk om: https://docs.microsoft.com/en-us/windows/desktop/api/winnt/ns-winnt-_osversioninfoexa

 DWORD dwMinorVersion;
  DWORD dwBuildNumber;
  DWORD dwPlatformId;
Endret av LMH1
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...