Gå til innhold

Foto

C++ lage dialogbox


6 svar i denne tråden

#1 LMH1

LMH1

    Bruker

  • Medlemmer
  • 19 323 innlegg
  •   28. oktober 2008

Skrevet 20. mai 2019 - 10:51

#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.


  • 0

4x Ryzen 7 1700, GTX 1080 ti, GTX titan SLI, R9 280x 32 GB ram 3000MHz og samsung 961 pro 1 TB SSD + 1 TB ssd , 10 TB hd


#2 ahw_

ahw_

    Bruker

  • Medlemmer
  • 422 innlegg
  •   12. november 2010

Skrevet 20. mai 2019 - 11:16

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.


Dette innlegget har blitt redigert av ahw_: 20. mai 2019 - 11:17

  • 3

#3 LMH1

LMH1

    Bruker

  • Medlemmer
  • 19 323 innlegg
  •   28. oktober 2008

Skrevet 20. mai 2019 - 11:28

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);

};


Dette innlegget har blitt redigert av LMH1: 20. mai 2019 - 11:32

  • 0

4x Ryzen 7 1700, GTX 1080 ti, GTX titan SLI, R9 280x 32 GB ram 3000MHz og samsung 961 pro 1 TB SSD + 1 TB ssd , 10 TB hd


#4 LMH1

LMH1

    Bruker

  • Medlemmer
  • 19 323 innlegg
  •   28. oktober 2008

Skrevet 20. mai 2019 - 11:35

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.


  • 0

4x Ryzen 7 1700, GTX 1080 ti, GTX titan SLI, R9 280x 32 GB ram 3000MHz og samsung 961 pro 1 TB SSD + 1 TB ssd , 10 TB hd


#5 ahw_

ahw_

    Bruker

  • Medlemmer
  • 422 innlegg
  •   12. november 2010

Skrevet 20. mai 2019 - 12:27

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å.


  • 1

#6 LMH1

LMH1

    Bruker

  • Medlemmer
  • 19 323 innlegg
  •   28. oktober 2008

Skrevet 20. mai 2019 - 12:54

 

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.microso...sversioninfoexa

 DWORD dwMinorVersion;
  DWORD dwBuildNumber;
  DWORD dwPlatformId;

Dette innlegget har blitt redigert av LMH1: 20. mai 2019 - 17:56

  • 0

4x Ryzen 7 1700, GTX 1080 ti, GTX titan SLI, R9 280x 32 GB ram 3000MHz og samsung 961 pro 1 TB SSD + 1 TB ssd , 10 TB hd


#7 ahw_

ahw_

    Bruker

  • Medlemmer
  • 422 innlegg
  •   12. november 2010

Skrevet 21. mai 2019 - 10:57

Har du prøvd det?


  • 0


0 bruker(e) leser denne tråden

0 medlemmer, 0 gjester, 0 skjulte brukere