Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Хочу сделать интерфейс как у MSV.NET


Автор: Texel 18.10.2003, 17:15
Люди подскажите! Решил сделать следующую версию редактора карт к своей игрухе!
И интерфейс хочу сделать как у MSV.NET или как у AutoCAD2000, то есть много оконный, отдельное окно для свойств и других параметров. Подскажите как это все реализовать? Через MFC AppWizard с порождением класса представления главного окна от CFormView или через стандартное Win32 приложение(апликацию), тоесть писать всё вручную под Windows XP? Или подскажите где можно взять документацию по программированию под Windows XP!

Автор: Texel 19.10.2003, 15:16
И ещё подскажите пожалуйста, как работать с окном после установки параметра WS_EX_PALETTEWINDOW в функции создания окна CreateWindowEx, какие нужно задать свойства в классе окна, что бы эту панель можно было разместить на родительском окне, т.е чтобы оно стало частью интерфейса?

Автор: Texel 19.10.2003, 18:06
Всё я понял что мне нужно! Я хочу создать CoolBar на WinApi, как и Visual Studio С++ хотябы? Чтобы это окно докировалось к главному окну...И ещё хочу узнать как размещать кнопочки и прочие в этом окне. Нашёл исходники но они для старого Буилдера...
Код
/*******************************************************            BuildRebar

*******************************************************/

HWND BuildRebar(HWND hwndParent)
{
HWND     hwndRebar = NULL;
LRESULT  lResult;

hwndRebar = CreateWindowEx(   WS_EX_TOOLWINDOW,
                             REBARCLASSNAME,
                             NULL,
                             WS_VISIBLE |
                                WS_BORDER |
                                WS_CHILD |
                                WS_CLIPCHILDREN |
                                WS_CLIPSIBLINGS |
                                RBS_VARHEIGHT |
                                RBS_BANDBORDERS |
                                CCS_NODIVIDER |
                                CCS_NOPARENTALIGN |
                                ((g_wSide & 0x01) ? CCS_VERT : 0) | //g_wSide is odd if this is a vertical bar
                                0,
                             0,
                             0,
                             200,
                             100,
                             hwndParent,
                             (HMENU)ID_REBAR,
                             g_hInst,
                             NULL);

if(hwndRebar)
  {
  REBARINFO      rbi;
  HIMAGELIST     himlRebar;
  HICON          hIcon;
  REBARBANDINFO  rbbi;
  HWND           hwndChild;
  RECT           rc;
  TCHAR          szString[64];

  //set up the ReBar
  himlRebar = ImageList_Create(32, 32, ILC_COLORDDB | ILC_MASK, 1, 0);
  hIcon = LoadIcon(g_hInst, MAKEINTRESOURCE(IDI_ICON1));

  ImageList_AddIcon(himlRebar, hIcon);

  rbi.cbSize  = sizeof(rbi);
  rbi.fMask   = RBIM_IMAGELIST;
  rbi.himl    = himlRebar;
  lResult = SendMessage(hwndRebar, RB_SETBARINFO, 0, (LPARAM)&rbi);

  //add a band that contains a combobox
  hwndChild = CreateWindowEx(   0,
                                TEXT("combobox"),
                                NULL,
                                WS_VISIBLE |
                                   WS_CHILD |
                                   WS_TABSTOP |
                                   WS_VSCROLL |
                                   WS_CLIPCHILDREN |
                                   WS_CLIPSIBLINGS |
                                   CBS_AUTOHSCROLL |
                                   CBS_DROPDOWN |
                                   0,
                                0,
                                0,
                                100,
                                200,
                                hwndRebar,
                                (HMENU)ID_COMBOBOX,
                                g_hInst,
                                NULL);

  //add some stuff to the combobox
  {
  int   i;

  SendMessage(hwndChild, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), MAKELPARAM(TRUE, 0));
   
  for(i = 0; i < 25; i++)
     {
     wsprintf(szString, TEXT("Item %d"), i + 1);
     SendMessage(hwndChild, CB_ADDSTRING, 0, (LPARAM)szString);
     }
  }
   
  GetWindowRect(hwndChild, &rc);
   
  ZeroMemory(&rbbi, sizeof(rbbi));
  rbbi.cbSize       = sizeof(REBARBANDINFO);
  rbbi.fMask        = RBBIM_SIZE |
                       RBBIM_CHILD |
                       RBBIM_CHILDSIZE |
                       RBBIM_ID |
                       RBBIM_STYLE |
                       RBBIM_TEXT |
                       RBBIM_BACKGROUND |
                       RBBIM_IMAGE |
                       0;
   
  rbbi.cxMinChild   = rc.right - rc.left;
  rbbi.cyMinChild   = rc.bottom - rc.top;
  rbbi.cx           = 100;
  rbbi.fStyle       = RBBS_CHILDEDGE |
                       RBBS_FIXEDBMP |
                       RBBS_GRIPPERALWAYS |
                       0;
  rbbi.wID          = ID_COMBOBOX;
  rbbi.hwndChild    = hwndChild;
  rbbi.lpText       = TEXT("ComboBox");
  rbbi.cch          = 2;
  rbbi.hbmBack      = LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_BACKGROUND));
  rbbi.iImage       = 0;

  lResult = SendMessage(hwndRebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)(LPREBARBANDINFO)&rbbi);

  //add a band that contains a button
  hwndChild = CreateWindowEx(   0,
                                TEXT("button"),
                                TEXT("Button"),
                                WS_CHILD |
                                   BS_PUSHBUTTON |
                                   0,
                                0,
                                0,
                                100,
                                50,
                                hwndRebar,
                                (HMENU)ID_BUTTON,
                                g_hInst,
                                NULL);
   
  GetWindowRect(hwndChild, &rc);
   
  ZeroMemory(&rbbi, sizeof(rbbi));
  rbbi.cbSize       = sizeof(REBARBANDINFO);
  rbbi.fMask        = RBBIM_SIZE |
                       RBBIM_CHILD |
                       RBBIM_CHILDSIZE |
                       RBBIM_ID |
                       RBBIM_STYLE |
                       RBBIM_TEXT |
                       RBBIM_BACKGROUND |
                       0;
  rbbi.cxMinChild   = rc.right - rc.left;
  rbbi.cyMinChild   = rc.bottom - rc.top;
  rbbi.cx           = 100;
  rbbi.fStyle       = RBBS_CHILDEDGE |
                       RBBS_FIXEDBMP |
                       RBBS_GRIPPERALWAYS |
                       0;
  rbbi.wID          = ID_BUTTON;
  rbbi.hwndChild    = hwndChild;
  rbbi.lpText       = TEXT("Button");
  rbbi.hbmBack      = LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_BACKGROUND));


  lResult = SendMessage(hwndRebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)(LPREBARBANDINFO)&rbbi);
  }

MoveRebar(hwndParent);

return hwndRebar;
}
/******************************************************

  MoveRebar()
   
******************************************************/

void MoveRebar(HWND hWnd)
{
RECT  rc,
     rcRebar;
int   x,
     y,
     cx,
     cy;

GetClientRect(hWnd, &rc);
GetWindowRect(GetDlgItem(hWnd, ID_REBAR), &rcRebar);

switch(g_wSide)
  {
  default:
  case TOP:
     //align the rebar along the top of the window
     x = 0;
     y = 0;
     cx = rc.right - rc.left;
     cy = rc.bottom - rc.top;
     break;

  case LEFT:
     //align the rebar along the left side of the window
     x = 0;
     y = 0;
     cx = rcRebar.right - rcRebar.left;
     cy = rc.bottom - rc.top;
     break;

  case BOTTOM:
     //align the rebar along the bottom of the window
     x = 0;
     y = rc.bottom - (rcRebar.bottom - rcRebar.top);
     cx = rc.right - rc.left;
     cy = rcRebar.bottom - rcRebar.top;
     break;

  case RIGHT:
     //align the coolbar along the right side of the window
     x = rc.right - (rcRebar.right - rcRebar.left);
     y = 0;
     cx = rcRebar.right - rcRebar.left;
     cy = rc.bottom - rc.top;
     break;
  }

MoveWindow( GetDlgItem(hWnd, ID_REBAR),
           x,
           y,
           cx,
           cy,
           TRUE);
}

Появился ли в С++ .NET какой-то специальный класс или свойство, которой позволяет сделать такое докирующееся окошко?
Только просьба если хоть что-нибудь знаете то скажите! Плиз! Хелп! Ахтунг! Хильфен мир зи битте!

Автор: mr.DUDA 20.10.2003, 22:43
Глянь вот сюда:
http://forum.vingrad.ru/index.php?act=ST&f=24&t=11916
это я специально для тех, кому нужны toolbar'ы/coolbar'ы и прочие скины, выкачал с китайского вареза крякнутую версию кульной питерской либы для User интерфейса.

Автор: Texel 21.10.2003, 18:18
Ладно посмотрю! Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)