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


Автор: Guest 16.12.2004, 22:21
Всегда писал консольные программы , теперь решил перейти на окна...
не получается создать окно ...
И еще подскажите как осуществлять ввод\вывод в окно...
извените за слишком простой вопрос...
Код

#include <windows.h>
int WINAPI WinMain(HINSTANCE a,HINSTANCE b,PSTR cmd,int hz){
WNDCLASS MyClass;
ATOM MyClassAtom;
HWND newwindow;
//registering class
MyClass.style=CS_HREDRAW;
MyClass.lpfnWndProc=CallWindowProc;
MyClass.cbClsExtra=0;
MyClass.cbWndExtra=0;
MyClass.hInstance=a;
MyClass.hIcon=NULL;
MyClass.hCursor=NULL;
MyClass.hbrBackground=NULL;
MyClass.lpszMenuName=NULL;
MyClass.lpszClassName="MyNewClass";
MyClassAtom=RegisterClass(&MyClass);
//creating window
newwindow=CreateWindow(&MyClassAtom,"MyNewWindow",WS_BORDER,100,100,100,100,GetDesktopWindow(),NULL,a,NULL);
for(;;){};
}

Автор: _dreamer_ 17.12.2004, 06:21
после создания окна нужно огранизовать message loop, а не просто бесконечный цикл

вот пример из MSDN.

Код

#include <windows.h>

// Global variable

HINSTANCE hinst;

// Function prototypes.

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
InitApplication(HINSTANCE);
InitInstance(HINSTANCE, int);
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);

// Application entry point.

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

   if (!InitApplication(hinstance))
       return FALSE;

   if (!InitInstance(hinstance, nCmdShow))
       return FALSE;

   while (GetMessage(&msg, (HWND) NULL, 0, 0) != 0 && GetMessage(&msg, (HWND) NULL, 0, 0) != -1)
   {
       TranslateMessage(&msg);
       DispatchMessage(&msg);
   }
   return msg.wParam;
       UNREFERENCED_PARAMETER(lpCmdLine);
}

BOOL InitApplication(HINSTANCE hinstance)
{
   WNDCLASSEX wcx;

   // Fill in the window class structure with parameters
   // that describe the main window.

   wcx.cbSize = sizeof(wcx);          // size of structure
   wcx.style = CS_HREDRAW |
       CS_VREDRAW;                    // redraw if size changes
   wcx.lpfnWndProc = MainWndProc;     // points to window procedure
   wcx.cbClsExtra = 0;                // no extra class memory
   wcx.cbWndExtra = 0;                // no extra window memory
   wcx.hInstance = hinstance;         // handle to instance
   wcx.hIcon = LoadIcon(NULL,
       IDI_APPLICATION);              // predefined app. icon
   wcx.hCursor = LoadCursor(NULL,
       IDC_ARROW);                    // predefined arrow
   wcx.hbrBackground = GetStockObject(
       WHITE_BRUSH);                  // white background brush
   wcx.lpszMenuName =  "MainMenu";    // name of menu resource
   wcx.lpszClassName = "MainWClass";  // name of window class
   wcx.hIconSm = LoadImage(hinstance, // small class icon
       MAKEINTRESOURCE(5),
       IMAGE_ICON,
       GetSystemMetrics(SM_CXSMICON),
       GetSystemMetrics(SM_CYSMICON),
       LR_DEFAULTCOLOR);

   // Register the window class.

   return RegisterClassEx(&wcx);
}

BOOL InitInstance(HINSTANCE hinstance, int nCmdShow)
{
   HWND hwnd;

   // Save the application-instance handle.

   hinst = hinstance;

   // Create the main window.

   hwnd = CreateWindow(
       "MainWClass",        // name of window class
       "Sample",            // title-bar string
       WS_OVERLAPPEDWINDOW, // top-level window
       CW_USEDEFAULT,       // default horizontal position
       CW_USEDEFAULT,       // default vertical position
       CW_USEDEFAULT,       // default width
       CW_USEDEFAULT,       // default height
       (HWND) NULL,         // no owner window
       (HMENU) NULL,        // use class menu
       hinstance,           // handle to application instance
       (LPVOID) NULL);      // no window-creation data

   if (!hwnd)
       return FALSE;

   // Show the window and send a WM_PAINT message to the window
   // procedure.

   ShowWindow(hwnd, nCmdShow);
   UpdateWindow(hwnd);
   return TRUE;

}


Автор: Guest 18.12.2004, 16:11
Код

#include <windows.h>

int WINAPI WinMain(HINSTANCE a,HINSTANCE b,PSTR cmd,int hz){
WNDCLASS MyClass;
ATOM MyClassAtom;
HWND newwindow;
MSG msg;

//registering class
MyClass.style=CS_HREDRAW|CS_VREDRAW;
MyClass.lpfnWndProc=CallWindowProc;
MyClass.cbClsExtra=0;
MyClass.cbWndExtra=0;
MyClass.hInstance=a;
MyClass.hIcon=NULL;
MyClass.hCursor=NULL;
MyClass.hbrBackground=GetStockObject(WHITE_BRUSH);
MyClass.lpszMenuName=NULL;
MyClass.lpszClassName="MyNewClass";
MyClassAtom=RegisterClass(&MyClass);

//creating window
newwindow=CreateWindow("MyNewClass","MyNewWindow",WS_OVERLAPPEDWINDOW,100,100,100,100,GetDesktopWindow(),NULL,a,NULL);
ShowWindow(newwindow,SW_SHOW);
UpdateWindow(newwindow);
while (GetMessage(&msg, (HWND) NULL, 0, 0) != 0 && GetMessage(&msg, (HWND) NULL, 0, 0) != -1)
   {
       TranslateMessage(&msg);
       DispatchMessage(&msg);
   };
}

Чтото он ошибку выдает... при запуске программы...
Ладно , понял , программить окна это не просто 2 новые функции заменяющие printf() и scanf() , может скажете книжку где все это написано коротко и полно?
Заранее спасибо..

Автор: prapor 18.12.2004, 16:33
Я тоже начал недавно мне посоветовали "С++ Builder" автор Никита Культин .Там всё понятно с примерами на диске .
Подробнее пиши на мыло .
Успехов !!!! smile

Автор: Guest 26.12.2004, 19:47
Иди на www.firststeps.ru

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