---
title: "Skapa fönster!"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/28149-skapa-fönster"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "Choice2"
published: "2001-11-21T21:35:00.000Z"
updated: "2002-01-11T09:25:00.000Z"
replies: 15
views: 672
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/28149-skapa-fönster"
---

# Skapa fönster!

## #1 — Choice2, 2001-11-21T21:35Z

Riktig n00b på det här med c++ osv.
Skulle behöva lite hjälp att skapa ett fönster där man kan genom en funktion skriva ut text. Någon som känner sig lite sugen på att skriva ihop något och kommentera?

Permalänk: https://www.webforum.nu/p/28149

## #2 — JimmyPalm, 2001-11-22T08:11Z

Hrm! Det krävs en del förkunskaper för att förstå sig på hur windows hantera sina fönster. Jag rekommenderar att du köper boken "Programming Windows 5th Edition av Petzold" som är en UTMÄRKT nybörjarbok. Jag använder den som läromedel för mina elever som läser just WIN32 API programmering.

Tips!
Starta ett nytt projekt i Visual Studio C++ 6.0 ( eller liknande ). Välj projektform: Win32 Application

Tryck på oki ( ge givetvis projektet ett namn ) och välj sedan alternativ tre i den gråa rutan som kommer upp.

Således alternativ: A Typical "Hello World" Application

Nu kommer du att få ett hyfsat bra kodexempel med KOMMENTARER som visar hur man öppnar ett fönster och skriver ut en text i den.

Lycka till!!!

Permalänk: https://www.webforum.nu/p/401438

## #3 — PeW, 2001-11-22T15:59Z

Det vimlar ju även av siter med källkoder till c / c++, speciellt populärt är det väl just med windows + fönster. Sök på google!
I övrigt skulle koden även till ett litet exempel bli lite väl lång att lägga upp här rakt upp och ned. Men särskilt "svårt" är det inte om man sätter sig in i winAPI:et, fast visst behövs grunderna i c/c++ först  ;)

Permalänk: https://www.webforum.nu/p/401439

## #4 — Choice2, 2001-11-22T16:46Z

Humma.. ska omforumulera mig lite. 
Jag har grunderna i C++, har ganska bra koll på det där med pekare och classer osv. 
Har dock ingen koll alls på fönsterhantering osv. Tutorial? skola? osv?

Permalänk: https://www.webforum.nu/p/401440

## #5 — Beatbox, 2001-11-22T17:20Z

Om du gör en MFC applikation får du en hel del gratis. Ett försnter från "scratch" (win32) är det en hel del bök med, dvs du måste implementera en egen message-pump för fönsteret etc. MFC sköter detta åt dig och man kan bara använda sig av fönstret.

// BeatBox

Permalänk: https://www.webforum.nu/p/401441

## #6 — PeW, 2001-11-23T10:58Z

MFC = Blä!
Får väl klistra in ett litet fönster i värsta Ernst-stil då:
\<font size="1" face="Verdana, Arial, Helvetica, sans-serif"\>Kod:\<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600"\>#define WIN32_LEAN_AND_MEAN
\#include \<windows.h\>
\#include \<windowsx.h\>
\#include \<stdio.h\>
\#include \<math.h\>

//Definitioner:

\#define WINDOW_CLASS_NAME "WINCLASS1"

//Globala:

HWND main_window_handle = NULL;   //Fönsterhandtag

//Deklarationer:

LRESULT CALLBACK WindowProc(HWND hwnd,
									 UINT msg,
                            WPARAM wparam,
                            LPARAM lparam)
	{

   //meddelandehanterare

   PAINTSTRUCT ps;  //-\> använt i WM_PAINT
   HDC hdc;         //-\> handtaget till enhetsinnehållet

   switch(msg)
   	{
   	case WM_CREATE:  // när fönstret skapas
      					  {
                       return 0;
                       } break;

      case WM_PAINT:   // när fönstret behöver ritas
      					  {
                       hdc = BeginPaint(hwnd,&ps);
                       EndPaint(hwnd,&ps);
                       return 0;
                       } break;

      case WM_DESTROY: // när fönstret avslutas
      					  {
                       PostQuitMessage(0); //-\> avslutar progget
                       return 0;
                       } break;

      default:break;
      }

      //bearbeta meddelanden som inte behandlats

      return(DefWindowProc(hwnd,msg,wparam,lparam));

      } // end WinProc

//\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  M A I N \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*

int WINAPI WinMain(HINSTANCE hinstance,
						 HINSTANCE hprevinstance,
                   LPSTR lpcmdline,
                   int ncmdshow)
  {
  WNDCLASS winclass;
  HWND hwnd;
  MSG msg;

  winclass.style = CS_DBLCLKS &#0124; CS_OWNDC &#0124; CS_HREDRAW &#0124; CS_VREDRAW;

  winclass.lpfnWndProc = WindowProc;
  winclass.cbClsExtra = 0;
  winclass.cbWndExtra = 0;
  winclass.hInstance = hinstance;
  winclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
  winclass.hCursor = LoadCursor(NULL,IDC_ARROW);
  winclass.hbrBackground = GetStockObject(BLACK_BRUSH);
  winclass.lpszMenuName = NULL;
  winclass.lpszClassName = WINDOW_CLASS_NAME;

  //registrera fönsterklassen:

  if(!RegisterClass(&winclass))
  				return 0;

  //Skapa fönstret:

  if(!(hwnd = CreateWindow(WINDOW_CLASS_NAME,                   //class
  								"Ett litet fönster!",   //titel
                           WS_OVERLAPPEDWINDOW &#0124; WS_VISIBLE,    //flagga
                           0,0,                                 //x och y
                           320,200,                             //bredd och höjd
                           NULL,                                //handtag moder
                           NULL,                                //handtag till meny
                           hinstance,
                           NULL)))                              //skapa parametrar

  		return 0;

  //spara fönsterhandtaget globalt:

  main_window_handle = hwnd;

  //gå in i huvudhändelseloopen:

  while(1)
  	{
   if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
   	{
      if(msg.message == WM_QUIT) break;
      TranslateMessage(&msg);         //översätt nycklar
      DispatchMessage(&msg);          //skicka meddelande
      }

      // placera fortsättningen här
   }

   return(msg.wParam);    //återgå till windows

  }

Funkar klockrent i Borland 5.02

Permalänk: https://www.webforum.nu/p/401442

## #7 — Beatbox, 2001-11-23T13:31Z

Är det inte lite att gå över ån efter vatten då uppgiften va :

> Skulle behöva lite hjälp att skapa ett fönster där man kan genom en funktion skriva ut text.

..och inte att lära sig win32 programmering ?

// BeatBox

Permalänk: https://www.webforum.nu/p/401443

## #8 — PeW, 2001-11-23T13:55Z

Är det inte lite att gå över ån efter vatten då uppgiften va 

Tja, det är inte första gången vi fattar saker olika, Beatbox   ;)
Men nu har han lite alternativ iaf. Själv är jag så "skadad" att jag helst vill se kod gentemot att använda färdiga mallar.

Permalänk: https://www.webforum.nu/p/401444

## #9 — netfeed, 2001-11-23T18:24Z

PeW vill inte vara pettig men i VB 6.0 ges felet:

Compiling...
fönster.cpp
C:\\programmering\\C++\\windows\\fönster.cpp(75) : error C2440: '=' : cannot convert from 'void \*' to 'struct HBRUSH_\_ \*'
        Conversion from 'void\*' to pointer to non-'void' requires an explicit cast
Error executing cl.exe.

windows.exe - 1 error(s), 0 warning(s)

lol

Permalänk: https://www.webforum.nu/p/401445

## #10 — Beatbox, 2001-11-23T18:40Z

> Men nu har han lite alternativ iaf. Själv är jag så "skadad" att jag helst vill se kod gentemot att använda färdiga mallar.

Med ett system dryga 2 miljoner rader (utan kommentarer, tomma rader och automatgenererat) så försöker man välja enkla lösningar och utnyttja så mycker "färdigt" som möjligt. :-)

// BeatBox

Permalänk: https://www.webforum.nu/p/401446

## #11 — PeW, 2001-11-23T18:47Z

> PeW vill inte vara pettig men i VB 6.0 ges felet:....

Ajdå... :l

Koden funkar dock i Borland som sagt, men den är ursprungligen gjord i en äldre version av MS Visual så förmodligen är det nån simpel konvertering som ska till. 
Precis som Ernst med sin kodspammning är denna kod hämtad ur en bok... men den illustrerar ganska bra (när man fått igång den) hur man lätt skapar ett grafiskt gränssnitt mot sina egna funktioner - utan att för den sakens skull ta till några hemska wizards...  ;)  eller färdiga mallar.

Beatbox -\>
Jo det fattar jag  ;) , men det var det väl inte frågan om här?

Permalänk: https://www.webforum.nu/p/401447

## #12 — Swey, 2001-11-23T19:34Z

"PeW vill inte vara pettig men i VB 6.0 ges felet"
Det är en viss skillnad på VB och VC.

Ändra
winclass.hbrBackground = GetStockObject(BLACK_BRUSH);
till
winclass.hbrBackground = GetStockBrush(BLACK_BRUSH);
eller
winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);

Permalänk: https://www.webforum.nu/p/401448

## #13 — netfeed, 2001-11-24T20:31Z

testade att ändra båda och fick fram båda ggr:na:

Compiling...
fönster.cpp
Linking...
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol \_main
Debug/fönster.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

fönster.exe - 2 error(s), 0 warning(s)

\---
vad gör jag för fel jag vill se vad hänner :)

Permalänk: https://www.webforum.nu/p/401449

## #14 — PeW, 2001-11-24T20:58Z

I Borland funkar koden. 
Men när jag testade den i VC98 fungerade det efter att ha rättat till felet (Swey´s tips (GetStockBrush()) )...

Inget hårresande, men en modell ... det blir ett litet fönster.

Permalänk: https://www.webforum.nu/p/401450

## #15 — JimmyPalm, 2002-01-10T16:29Z

Problemet är att du har en FELAKTIG WINMAIN, eftersom den main du har gjort inte är godkänd. Testa med följande:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)

Lycka till.

Om det inte lyckas kan du maila jimmy.palm@spray.se så skall vi se om jag inte kan hjälpa dig mer.

Permalänk: https://www.webforum.nu/p/401451

## #16 — Dinodipp, 2002-01-11T09:25Z

Det finns en bra tutorial på <http://www.relisoft.com/win32/winnie.html> 
där lär man sig bygga fönster classer och komponenter utan att använda sig av mfc.

Permalänk: https://www.webforum.nu/p/401452

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/28149-skapa-fönster
