Avatar billede jakobdo Ekspert
24. juni 2004 - 15:51 Der er 5 kommentarer og
1 løsning

CreateWindow SDK

Hej,
jeg er ved at lege lidt med SDK og C++.
I den forbindelse har jeg lavet standard vindue..
Hvis jeg ønsker at halvdelen skal være hvid, hvordan gør jeg så det?

Jeg antager jeg skal bruge CreateWindow igen, og så kalde den med dwStyle WS_CHILD...
Men skal jeg også udfylde en wndClass??
Hvor jeg så sætter baggrundsfarve til hvid?

Håber nogle kan forstå og evt hjælpe! :o)
Avatar billede jakobdo Ekspert
24. juni 2004 - 15:58 #1
Det jeg tænker på er noget i stil med:

G = GRÅ
H = HVID

Vinduet ser nu sådan ud:

GGGGGGGGGG
GGGGGGGGGG
GGGGGGGGGG
GGGGGGGGGG

Jeg ønsker f.eks.

GGGGGGGGGG
GGHHHHHHGG
GGHHHHHHGG
GGGGGGGGGG

Men forstår ikke rigtigt hvordan jeg laver flere vinduer med baggrundsfarve på!
Avatar billede nico26 Nybegynder
24. juni 2004 - 19:04 #2
du behøver da ikke lave et nyt vindue, du kan vel bare tegne et hvidt rektangel...
Avatar billede nico26 Nybegynder
24. juni 2004 - 19:21 #3
du kan bruge mit eksempel fra dette spm. http://www.eksperten.dk/spm/237548

og så bare tilføje lidt kode der hvor WM_PAINT bliver fanget

case WM_PAINT:
  hdc = BeginPaint(hwnd,&ps);

  SelectObject(ps.hdc, GetStockObject(WHITE_BRUSH));
  Rectangle(ps.hdc, 50, 50, 100, 100);

  EndPaint(hwnd,&ps);
  return(0);
Avatar billede jakobdo Ekspert
24. juni 2004 - 21:02 #4
Cool! :o)
Jeg er ikke så erfaren i ren Windows SDK kodning...
Så jeg takker!
Smid et svar!
Avatar billede bertelbrander Novice
24. juni 2004 - 21:25 #5
Hvis du vil lave et seperart child vindue:

#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>
#include <string.h>

HINSTANCE hInst;        // Instance handle
HWND hwndMain;          //Main window handle
HBRUSH ChildWndBrush;
HWND ChildWnd;

LRESULT CALLBACK MainWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);

LRESULT CALLBACK ChildWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
    return DefWindowProc(hwnd, msg, wParam, lParam);
}

static void CreateChildWnd(void)
{
  WNDCLASS wc;
  ChildWndBrush = CreateSolidBrush(RGB(128,128,128));
  memset(&wc,0,sizeof(WNDCLASS));
  wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
  wc.lpfnWndProc = (WNDPROC )ChildWndProc;
  wc.hInstance = hInst;
  wc.hbrBackground = ChildWndBrush;
  wc.lpszClassName = "NG43ChildClass";
  wc.lpszMenuName = 0;
  wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);

  if (!RegisterClass(&wc))
      return;

  ChildWnd = CreateWindow("NG43ChildClass", NULL,
                          WS_CHILD | WS_VISIBLE,
                          CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
                          hwndMain,
                          NULL,
                          hInst,
                          NULL);
}

static BOOL InitApplication(void)
{
  WNDCLASS wc;

  memset(&wc,0,sizeof(WNDCLASS));
  wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
  wc.lpfnWndProc = (WNDPROC )MainWndProc;
  wc.hInstance = hInst;
  wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
  wc.lpszClassName = "NG43WndClass";
  wc.lpszMenuName = 0;
  wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  if (!RegisterClass(&wc))
      return 0;

  return 1;
}

HWND Createng43WndClassWnd(void)
{
  return CreateWindow("NG43WndClass", "ng43",
                      WS_MINIMIZEBOX | WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_MAXIMIZEBOX|WS_CAPTION|WS_BORDER|WS_SYSMENU|WS_THICKFRAME,
                      CW_USEDEFAULT,0,CW_USEDEFAULT,0,
                      NULL,
                      NULL,
                      hInst,
                      NULL);
}

LRESULT CALLBACK MainWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
  switch (msg)
  {
      case WM_SIZE:
      {
        if(ChildWnd && hwnd)
        {
            int Width, Height;
            RECT R;
            GetClientRect(hwnd, &R);
            Width = (R.right - R.left)/4;
            Height = (R.bottom - R.top)/4;

            MoveWindow(ChildWnd, Width, Height, Width*2, Height*2, TRUE);
        }
        return TRUE;
      }
      break;
      case WM_DESTROY:
        PostQuitMessage(0);
        break;
      default:
        return DefWindowProc(hwnd,msg,wParam,lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)
{
  MSG msg;

  hInst = hInstance;
  if (!InitApplication())
      return 0;

  if ((hwndMain = Createng43WndClassWnd()) == (HWND)0)
      return 0;

  CreateChildWnd();

  ShowWindow(hwndMain,SW_SHOW);
  while (GetMessage(&msg,NULL,0,0))
  {

      TranslateMessage(&msg);
      DispatchMessage(&msg);
  }
  return msg.wParam;
}
Avatar billede nico26 Nybegynder
24. juni 2004 - 21:40 #6
et svar :)
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