Avatar billede pablopablo Nybegynder
10. december 2004 - 22:17 Der er 29 kommentarer og
1 løsning

Hjælp til en lillebitte form!

Hejsa...

Jeg har 3 exe-filer(dot net setups) og jeg vil gerne have lavet en lille c++ fil/winform som kan kalde en af de 3 filer - det er alt!
Men jeg kan ikke kode c++, det må ikke være C++.Net, da det SKAL kunne køre uden frameworket indstilleret...

Hvis i kan fortælle mig hvorledes jeg laver en lille form med en label, en combobox og én knap i c++ unmanged kode...så får i 200point!

mvh. pablopablo
Avatar billede nlf Nybegynder
11. december 2004 - 12:20 #1
Hvis du kan andre sprog, kan du da bare altid bruge Win32 API til det hele...
Det er ikke svært, du kan altid bare slå op på msdn.com
Avatar billede pablopablo Nybegynder
11. december 2004 - 17:41 #2
kunne du forklare det lidt mere detaljeret...?-)
Avatar billede bertelbrander Novice
11. december 2004 - 20:48 #3
Man kunne starte med:

#include <windows.h>
#include <commctrl.h>
#include <stdlib.h>

#define IDC_COMBO  1200
#define IDC_EXECUTE 1201

HINSTANCE InstanceHandle;

static const char * const ProgParam[][2] =
{
  {"Notepad", "notepad.exe"},
  {"Internet Explorer", "iexplore.exe"},
  {"Dos-box", "Command.com"}
};

bool Running = true;
LRESULT CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
  int i;
  HWND HwndCombo;
  switch(msg)
  {
  case WM_CREATE:
      HwndCombo = CreateWindow("COMBOBOX",
                                0,
                                WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | WS_VSCROLL,
                                5, 5, 200, 100,
                                hwndDlg,
                                (HMENU )IDC_COMBO,
                                InstanceHandle,
                                0);
      for(i = 0; i < 3; i++)
        SendMessage(HwndCombo, CB_ADDSTRING, 0, (LPARAM )ProgParam[i][0]);
      SendMessage(HwndCombo, CB_SETCURSEL, 0, 0);
      CreateWindow("BUTTON", "Execute", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                  210, 5, 70, 28,
                  hwndDlg,
                  (HMENU )IDC_EXECUTE,
                  InstanceHandle,
                  0);
      break;
  case WM_QUIT:
      EndDialog(hwndDlg, 0);
      Running = false;
      break;
  case WM_DESTROY:
      Running = false;
      break;
  case WM_COMMAND:
      if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_EXECUTE)
      {
        int idx = SendDlgItemMessage(hwndDlg, IDC_COMBO, CB_GETCURSEL, 0, 0);
        if(idx >= 0)
        {
            STARTUPINFO StartupInfo;
            PROCESS_INFORMATION ProcessInformation;
            memset(&StartupInfo, 0, sizeof(StartupInfo));
            StartupInfo.cb = sizeof(StartupInfo);

            CreateProcess(0, (char *)ProgParam[idx][1], 0, 0, 0, 0, 0, 0, &StartupInfo, &ProcessInformation);
        }
      }
      break;
  }
  return DefWindowProc(hwndDlg, msg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpCmdLine, INT nCmdShow)
{
  WNDCLASS wc;
  InstanceHandle = hInstance;
  InitCommonControls();
  memset(&wc, 0, sizeof(WNDCLASS));
  wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
  wc.lpfnWndProc = DialogProc;
  wc.hInstance = InstanceHandle;
  wc.hbrBackground = (HBRUSH )(COLOR_BTNFACE + 1);
  wc.lpszClassName = "WhateverClass";
  wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  if(!RegisterClass(&wc))
      return FALSE;

  HWND WindowHandle = CreateWindow("WhateverClass",
                                    "Whatever",
                                    WS_VISIBLE | WS_CAPTION | WS_BORDER | WS_SYSMENU,
                                    100, 100, 330, 100,
                                    NULL,
                                    NULL,
                                    InstanceHandle,
                                    0);
  MSG Msg;
  while(Running && GetMessage(&Msg, 0, 0, 0xFFFF) > 0)
  {
      if(!IsDialogMessage(WindowHandle, &Msg))
      {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
      }
  }
  return 0;
}
Avatar billede pablopablo Nybegynder
11. december 2004 - 22:13 #4
bertelbrander >> Skal jeg blot paste det ind i .net c++ console projekt...?
Avatar billede pablopablo Nybegynder
11. december 2004 - 22:43 #5
kan ikke få det til at virke...?
Avatar billede bertelbrander Novice
11. december 2004 - 22:46 #6
Det er et komplet program. Du kan kompilere det fra kommando-linien.
Jeg er ikke så meget inde i .net. Hvad sker der når du forsøger at kompilere?
Avatar billede pablopablo Nybegynder
11. december 2004 - 22:48 #7
Den skriver : "fatal error C1010: unexpected end of file while looking for precompiled header directive"
Avatar billede bertelbrander Novice
11. december 2004 - 22:52 #8
Der skal ikke bruges precompiled headers, du kan slå det fra et sted.

Jeg har lagt et project lavet med VC 6.0 her:
http://home20.inet.tele.dk/midgaard/ng75.zip

Du burde kunne åbne det i .net versionen.
Avatar billede pablopablo Nybegynder
11. december 2004 - 23:03 #9
det virker...men kan jeg ikke hente et værktøj hvor jeg selv kan design det grafiske...jeg vil gerne have 3 billeder som man kan trykke på i steder for comboboxen og knappen, samt en label oven over...og det må gerne køre i fuldskærm...
Avatar billede bertelbrander Novice
11. december 2004 - 23:12 #10
Du kan tegne det grafiske i VC .net, jeg tror godt at den kan lave applikationer der ikke kræver .net. Men jeg har ikke VC .net
Avatar billede pablopablo Nybegynder
11. december 2004 - 23:14 #11
ja det kan den....men der er kun grafisk support til managed kode...:(
Avatar billede bertelbrander Novice
11. december 2004 - 23:15 #12
Jeg prøver lige at lave programmet fra før om til at bruge tre knapper med billeder.
Avatar billede pablopablo Nybegynder
12. december 2004 - 00:26 #13
det lyder sgu godt :) er det den samme fil jeg skal hente?
Avatar billede bertelbrander Novice
12. december 2004 - 00:48 #14
Avatar billede pablopablo Nybegynder
12. december 2004 - 03:16 #15
Det er jo fint ud....knap 1 og 3 virker....men der ske ikke noget når jeg trykker på knap 2? Hvis jeg ikke køre det igennem Visual Studio...men blot klikke på exe fil i mappen er billederne ikke på knapperne....når jeg vælger at lave et release kommer den med disse to fejl :

ng75 error LNK2019: unresolved external symbol __imp__InitCommonControls@0 referenced in function _WinMain@16

ng75 fatal error LNK1120: 1 unresolved externals

hvis jeg gerne vil have formen til at køre i fuldskærm hvad skal jeg så gøre?
Avatar billede bertelbrander Novice
12. december 2004 - 14:48 #16
Knap 2 kræver at du har iexplorer.exe i din path, det har man ikke som standard. Du kan prøve at angive den fulde sti i ButtonInfo strukturen.

Du skal linke med comctl32.lib

For at få den maximeret skal du ændre CreateWindow i WinMain til:

  HWND WindowHandle = CreateWindow("WhateverClass",
                                    "Whatever",
                                    WS_VISIBLE | WS_CAPTION | WS_BORDER | WS_SYSMENU | WS_MAXIMIZE | DS_MODALFRAME | WS_THICKFRAME,
                                    CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
                                    NULL,
                                    NULL,
                                    InstanceHandle,
                                    0);

Og tilføje:
  ShowWindow(WindowHandle, SW_MAXIMIZE);
Avatar billede pablopablo Nybegynder
12. december 2004 - 23:06 #17
Hej igen....

Du skriver "Du skal linke med comctl32.lib" det ved jeg ikke hvordan jeg gør? Og hvad gør det, kan jeg så lave et release som inkl. div. billeder...?-)

En anden ting, er koden "helt" sikker, jeg mener den må ikke kunne crashe...det er til prof. brug ;) Hvis det opstår en intern exception må der ikke komme en eller anden mærkelig besked frem på brugerens skærm...:) Kan det laves sådan?
Avatar billede pablopablo Nybegynder
12. december 2004 - 23:35 #18
endnu et spg...jeg har fået justeret det grafiske som jeg ønsker det...men hvordan ændrer jeg størrelse på labelen?

Det aller sidste spg. er det muligt, at indsætte i baggrundsbillede i hele formen, som er "docket" til formen, således det vil fylde hele baggrunden ud lige meget hvilken opløsning/skærm man kører med...?
Avatar billede bertelbrander Novice
12. december 2004 - 23:46 #19
Du linker med comctl32.lib ved at tilføje det under Project Settings -> Linker.

Jeg kan ikke se hvordan koden skulle kunne crashe.
Der bør nok tilføjes nogle fejlcheck her og der.

Man kan lave en .rc file der inkludere billederne og linke med denne, så skal du ikke distribuere billederne seperart.

Man kan godt lave et baggrunds billede der fylder hele resten af formen.

Labelen bliver lavet med linien:
CreateWindow("STATIC", "Label", ...

Du ændrer bare teksten og størrelsen 200 er bredden.

Jeg prøver lige at lave et eksempel.
Avatar billede bertelbrander Novice
13. december 2004 - 00:44 #20
Avatar billede pablopablo Nybegynder
13. december 2004 - 00:51 #21
tjekker den lige ud....
Avatar billede pablopablo Nybegynder
13. december 2004 - 01:11 #22
? Hvad har du lavet ved det...billederne vises ikke engang ?
Jeg vil være dybt tak nemmelig hvis du kan få programmet til følgende :

- Docke et baggrundsbillede i formen.
- Lave teksten i labellen større (Kan kun ændre positionen og str. på selve labelen)
- Gøre så at billederne bliver inkl. i exe fil
- Gøre således at jeg kan lave et release af projektet, således at jeg kun behøver den éne(exe) fil for at køre det ;)

Hvis du kan det får du de 200points ved det vums!! (og flere hvis du ønsker det ;) )
Avatar billede bertelbrander Novice
13. december 2004 - 01:15 #23
Ups, havde glemt at gemme projectet inden jeg zippede.
Prøv at tilføje .rc filen til projektet og byg igen.

Jeg laver lige en version med en større text.
Avatar billede pablopablo Nybegynder
13. december 2004 - 01:20 #24
- og selvfølgelig at du har indsat div. fejltjek! :)
Avatar billede bertelbrander Novice
13. december 2004 - 01:35 #25
Vi prøver lige igen:
http://home20.inet.tele.dk/midgaard/ng75-4.zip

Nej, jeg har ikke indsat fejl-check. Jeg er for træt nu & må i seng.
Avatar billede pablopablo Nybegynder
13. december 2004 - 01:41 #26
okey...men jeg vil bliver meget glad hvis du har tid i morgen! ?-))
Avatar billede pablopablo Nybegynder
13. december 2004 - 02:27 #27
Har lige prøvet at lave et release...og det virkede fint....men jeg skal lige høre dig om noget...pga...da jeg lavede releaset skrev den : "ng75.exe does not contain debugging information (No symbols loaded) Click OK to debug anyway"...hvad betyder dette?
Avatar billede pablopablo Nybegynder
13. december 2004 - 04:52 #28
Endnu tilbud til dig fra mig ;) http://www.eksperten.dk/spm/570512
Avatar billede bertelbrander Novice
13. december 2004 - 19:51 #29
Den besked er normal. Det betyder bare at den tror at du vil debugge en release version der ikke indeholder debug information. Du kan bare ignorere den, den kommer ikke hvis man kører .exe filen.

Man må ikke give mere end 200 point for det samme spørgsml, og jeg vil ikke have point, så luk dette spørgsmål, så fortsætter vi i det andet.
Avatar billede pablopablo Nybegynder
14. december 2004 - 02:19 #30
ok...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester