Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2011, 16:43   #1
maxflint
работаю за еду
Пользователь
 
Аватар для maxflint
 
Регистрация: 31.10.2009
Сообщений: 64
По умолчанию Ошибки. GetLastError()

Отлов ошибок, ошибка регистрации окна, ошибка создания окна, ошибка создания дочернего окна.
Может кому пригодится..

Код:
#include <windows.h>
#include "windowsx.h"
#include "winerror.h"
 
 
int EXIT_BTN = 10001;
int NEW_FORM = 10002;
int NEW_WIND = 10003;
int CNT_CRT = 10004;
int DIV_ZER = 10005;
 
HINSTANCE hInstance;
HWND MainHwnd;
 
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ChildProc(HWND hwnd, UINT Message, WPARAM wparam,LPARAM lparam);
 
int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
 
{
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;
 
    wincl.hInstance = hThisInstance;
    hInstance = hThisInstance;
    wincl.lpszClassName = "WindowsApp";
    wincl.lpfnWndProc = WindowProcedure;
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof (WNDCLASSEX);
 
 
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
 
    if (!RegisterClassEx (&wincl))
        return 0;
 
    hwnd = CreateWindowEx (
           0,
           "WindowsApp",
           "Windows App",
           WS_OVERLAPPEDWINDOW,
           CW_USEDEFAULT,
           CW_USEDEFAULT,
           630,
           100,
           HWND_DESKTOP,
           NULL,
           hInstance,
           NULL
           );
 
    MainHwnd = hwnd;
    CreateWindow("button", "Выход", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                10, 10,
                60, 60,
                hwnd,
                (HMENU)EXIT_BTN,
                hThisInstance, NULL);
 
    CreateWindow("button", "Ошибка  регистрации", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                70, 10,
                150, 60,
                hwnd,
                (HMENU)NEW_FORM,
                hThisInstance, NULL);
 
    CreateWindow("button", "Ошибка  создания", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                220, 10,
                150, 60,
                hwnd,
                (HMENU)CNT_CRT,
                hThisInstance, NULL);
 
    CreateWindow("button", "Ошибка создания дочернего окна", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                370, 10,
                235, 60,
                hwnd,
                (HMENU)DIV_ZER,
                hThisInstance, NULL);
 
    ShowWindow (hwnd, nFunsterStil);
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    return messages.wParam;
}
Вотан ждёт меня в своих чертогах, на свой вечный пир!
maxflint вне форума Ответить с цитированием
Старый 17.04.2011, 16:45   #2
maxflint
работаю за еду
Пользователь
 
Аватар для maxflint
 
Регистрация: 31.10.2009
Сообщений: 64
По умолчанию

Код:
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_DESTROY:
            PostQuitMessage (0);
            break;
        case WM_COMMAND:
             if(LOWORD(wParam)==EXIT_BTN)
             {
                  PostQuitMessage (0);
             }
             if(LOWORD(wParam)==NEW_FORM)
             {
               WNDCLASS w;
               WNDCLASS wd;
               memset(&wd,0,sizeof(WNDCLASS));
                           memset(&w,0,sizeof(WNDCLASS));
                           w.lpfnWndProc = WindowProcedure;
                           w.hInstance = hInstance;
                           w.lpszClassName = "ChildWClass";
                           wd.lpszClassName = "ChildWClass";
                           w.hCursor=LoadCursor(NULL,IDC_CROSS);
                           RegisterClass(&wd);
                           if (RegisterClass(&w) == 0)
                           {
                                        LPTSTR buffer;
                                        FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_ALLOCATE_BUFFER,
                                                        NULL,
                                                        GetLastError(), 0,
                                                        (LPTSTR)&buffer,  0, NULL);
                                        char buffer2[32];
                                        wsprintf((LPTSTR)&buffer2, "%d",GetLastError() );
                                        MessageBox(0, buffer, (LPTSTR)&buffer2, 0);
                           }
 
             }
             if(LOWORD(wParam)==CNT_CRT)
             {
               WNDCLASS w;
               WNDCLASS wd;
               memset(&wd,0,sizeof(WNDCLASS));
                           memset(&w,0,sizeof(WNDCLASS));
                           w.lpfnWndProc = WindowProcedure;
                           w.hInstance = hInstance;
                           w.lpszClassName = "ChildWClass";
                           w.hCursor=LoadCursor(NULL,IDC_CROSS);
                           RegisterClass(&w);
 
                           HWND child;
                           child=CreateWindow("ChildWClasss",(LPCTSTR) NULL,
                                           WS_CHILD | WS_BORDER | WS_VISIBLE ,100,10,
                                           200,200,hwnd,(HMENU)NEW_WIND,hInstance,NULL);
                           LPTSTR buffer;
                           FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_ALLOCATE_BUFFER,
                                                                        NULL,
                                                                        GetLastError(), 0,
                                                                (LPTSTR)&buffer, 0, NULL);
                                                        char buffer2[32];
                                                        wsprintf((LPTSTR)&buffer2, "%d",GetLastError() );
                                                        MessageBox(0, buffer, (LPTSTR)&buffer2, 0);
                           ShowWindow(child,SW_NORMAL);
                           UpdateWindow(child);
 
             }
                         if(LOWORD(wParam)==DIV_ZER)
                         {
                                        CreateWindow("button", "Не возможно создать", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                                        440, 10,
                                        200, 90,
                                        NULL,
                                        (HMENU)CNT_CRT,NULL, NULL);
 
                                        LPTSTR buffer;
 
                                        FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_ALLOCATE_BUFFER,
                                                                                                        NULL,
                                                                                                        GetLastError(), 0,
                                                                                                        (LPTSTR)&buffer, 0, NULL);
                                                                                        char buffer2[32];
                                                                                        wsprintf((LPTSTR)&buffer2, "%d",GetLastError() );
                                                                                        MessageBox(0, buffer, (LPTSTR)&buffer2, 0);
             }
             break;
        default:
            return DefWindowProc (hwnd, message, wParam, lParam);
    } 
    return 0;
}
Вотан ждёт меня в своих чертогах, на свой вечный пир!
maxflint вне форума Ответить с цитированием
Старый 17.04.2011, 16:45   #3
maxflint
работаю за еду
Пользователь
 
Аватар для maxflint
 
Регистрация: 31.10.2009
Сообщений: 64
По умолчанию

Код:
LRESULT CALLBACK ChildProc(HWND hwnd, UINT Message, WPARAM wparam,LPARAM lparam)
{
        if (Message == WM_DESTROY )
        {
                return 0;
        }
        return DefWindowProc(hwnd,Message,wparam,lparam);
}
Вотан ждёт меня в своих чертогах, на свой вечный пир!
maxflint вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибки... VIKA1829 Помощь студентам 5 13.03.2011 18:26
Ошибки Дим@@ Помощь студентам 4 06.11.2010 23:36
ошибки almazz Помощь студентам 0 15.04.2010 16:34
Ошибки delphin100 Операционные системы общие вопросы 12 17.04.2008 14:15