Новичок: Как решить проблему с MessageBox?
От: senatc Россия http://www.clubwise.com
Дата: 30.03.02 14:37
Оценка:

Начал изучать VC++ (жизнь заставила). Все вроде как постепенно получается. Но уткнулся в тупую проблему и на вскидку нигде не могу найти решения. Поскажите — кто может.

Пример, можно сказать, академический.

Есть у меня переменная "DWORD lasterr;", который получает код ошибки:

lasterr=GetLastError();

Все работает замечательно. Суть моей тупой проблемы — как вывести этот код в MessageBox? Компилер ругается, а как это сделать я не знаю. Ну чтоб было что-то типа

"Ошибка"
"Код ошибки — <lasterr здесь>"
<OK>

Ну никак не пойму, как это сделать!

Заранее спасибо,
Сергей
---
Sergey V. Natarov
Re: Новичок: Как решить проблему с MessageBox?
От: Курилка Россия http://kirya.narod.ru/
Дата: 30.03.02 14:38
Оценка:
Здравствуйте senatc, Вы писали:

S>

S>Начал изучать VC++ (жизнь заставила). Все вроде как постепенно получается. Но уткнулся в тупую проблему и на вскидку нигде не могу найти решения. Поскажите — кто может.

S>Пример, можно сказать, академический.


S>Есть у меня переменная "DWORD lasterr;", который получает код ошибки:


S>lasterr=GetLastError();


S>Все работает замечательно. Суть моей тупой проблемы — как вывести этот код в MessageBox? Компилер ругается, а как это сделать я не знаю. Ну чтоб было что-то типа


S>"Ошибка"

S>"Код ошибки — <lasterr здесь>"
S><OK>

S>Ну никак не пойму, как это сделать!


S>Заранее спасибо,

S>Сергей
Re: Новичок: Как решить проблему с MessageBox?
От: Курилка Россия http://kirya.narod.ru/
Дата: 30.03.02 14:45
Оценка: 3 (1)
Здравствуйте senatc, Вы писали:

S>

S>Начал изучать VC++ (жизнь заставила). Все вроде как постепенно получается. Но уткнулся в тупую проблему и на вскидку нигде не могу найти решения. Поскажите — кто может.

S>Пример, можно сказать, академический.


S>Есть у меня переменная "DWORD lasterr;", который получает код ошибки:


S>lasterr=GetLastError();


S>Все работает замечательно. Суть моей тупой проблемы — как вывести этот код в MessageBox? Компилер ругается, а как это сделать я не знаю. Ну чтоб было что-то типа


S>"Ошибка"

S>"Код ошибки — <lasterr здесь>"
S><OK>

примерно так
TCHAR buf[256];//на всякий случай
wsprintf("Код ошибки - %d", lasterr)
::MessageBox(NULL, buf, "Ошибка", MB_OK)

только это будет код в виде числа

а если для отладки, то смотри TRACE или ATLTRACE, а ещё в DEBUG можно посмотреть
в Watch @err,hr — там тебе код и его описание будет
Re: Новичок: Как решить проблему с MessageBox?
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 30.03.02 14:49
Оценка: 3 (1)
Здравствуйте senatc, Вы писали:

S>Есть у меня переменная "DWORD lasterr;", который получает код ошибки:

S>lasterr=GetLastError();
S>... — как вывести этот код в MessageBox? Компилер ругается, а как это сделать я не знаю. Ну чтоб было что-то типа

S>"Ошибка"

S>"Код ошибки — <lasterr здесь>"
S><OK>

S>Ну никак не пойму, как это сделать!


Получить текст сообщения об ошибке (можно так), либо, если та расширенная информация не нужна, а надо просто число в строку переконвертить, то есть для этого
int wsprintf(
  LPTSTR lpOut,    // output buffer
  LPCTSTR lpFmt,   // format-control string
  ...              // optional arguments
);


Тогда использование ее такое (код не проверял, в нем главное — смысл):
  DWORD dwErr = GetLastError();
  ...
  if ( <произошла ошибка> )
  {
    TCHAR buf[0x100]; // твой любимый размер, в который результат влезет ;-))
    wsprintf( buf, "Ошибка!\nКод ошибки - %u\n", dwErr );
    ...
    // засунуть это в MessageBox
  }


С уважением
Алексей Кирдин
Re[2]: Новичок: Как решить проблему с MessageBox?
От: senatc Россия http://www.clubwise.com
Дата: 30.03.02 15:06
Оценка:
Кирил, Алексей,

Огромное спасибо! Работает.

Но не помогло "Что акула глухая?" -- "Не-а-а, свистка не досталось...".

Пойду дальше разбираться...

Сергей
---
Sergey V. Natarov
Re[3]: Новичок: Как решить проблему с MessageBox?
От: Курилка Россия http://kirya.narod.ru/
Дата: 30.03.02 15:12
Оценка:
S>Кирил, Алексей,

S>Огромное спасибо! Работает.


За спасибо спасибо, а вот за 0 и 1 л обидно , хотя последнее не принимай близко к сердцу — уже привык, хотя...
Удачи в поисках!
Да, а что тебе не помогло-то?
Re[4]: Новичок: Как решить проблему с MessageBox?
От: senatc Россия http://www.clubwise.com
Дата: 30.03.02 15:21
Оценка:
Здравствуйте Курилка, Вы писали:

S>>Кирил, Алексей,

К>За спасибо спасибо, а вот за 0 и 1 л обидно , хотя последнее не принимай близко к сердцу — уже привык, хотя...
К>Удачи в поисках!
К>Да, а что тебе не помогло-то?

Кирилл,

Да, виновен! Извиняюсь. Но как отредактировать сообщение — пока не знаю. Первый 0, я так понимаю, оценка? Если да, то видимо что-то не так сделал. Вроде как на 3 нажимал... (сорри, пока не разобрался, как это все тут работает). Ну не созла, честное слово! Каюсь дважды. От оценок пока буду воздерживаться. За "л" вообще стыдно . Снова извиняюсь.

А не помогло не в смысле ответов, а в смысле контекста. Сижу, ковыряю тут MSDNовские примерчики. На экранчик выводится битмап, у которого можно менять размер рамки и перетаскивать по экрану. Размер битмапа прописан явно (0, 0, 32, 32). Ну вот и попытался унифицировать — как и ожидалось — ничего не получилось .



hbmp = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP)); 
...
bRes = GetBitmapDimensionEx(hbmp, lpBmpDim);
...
if (bRes) {
    lbmpcx = lpBmpDim->cx;
    lbmpcy = lpBmpDim->cy;
}
...
SetRect(&rcBmp, 1, 1, 34, 34);


Вот и решил глянуть — что за ошибка... Тут и уткнулся...

Еще раз извиняюсь,
Сергей
---
Sergey V. Natarov
Re[5]: Новичок: Как решить проблему с MessageBox?
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 30.03.02 15:28
Оценка:
Здравствуйте senatc, Вы писали:

S>Да, виновен! Извиняюсь. Но как отредактировать сообщение — пока не знаю.


Вот тебе User's Guide
Автор: VladD2
Дата: 25.01.02
по оценкам, и что это вообще такое.

Чтоб оценку отменить, надо нажать в том-же сообщении на другую, или на крестик (типа, похоронить). А ноль — это выражение недовольства, что в твоем случае не наблюдается.

Сохраняется последняя оценка из поставленных, так-что ноль твой будет перекрыт троечкой, если ты соизволишь ее поставить.

С уважением
Алексей Кирдин
Re[6]: Новичок: Как решить проблему с MessageBox?
От: senatc Россия http://www.clubwise.com
Дата: 30.03.02 15:32
Оценка:
Снова спасибо. Ну дык вроде сейчас все нормально. По крайней мере — показывает 6. У каждого — по 3. Вроде все Ок.

Сергей

S>>Да, виновен! Извиняюсь. Но как отредактировать сообщение — пока не знаю.


Kaa>Вот тебе User's Guide
Автор: VladD2
Дата: 25.01.02
по оценкам, и что это вообще такое.


Kaa>Чтоб оценку отменить, надо нажать в том-же сообщении на другую, или на крестик (типа, похоронить). А ноль — это выражение недовольства, что в твоем случае не наблюдается.


Kaa>Сохраняется последняя оценка из поставленных, так-что ноль твой будет перекрыт троечкой, если ты соизволишь ее поставить.


Kaa>С уважением
---
Sergey V. Natarov
Re[5]: Новичок: Как решить проблему с MessageBox?
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 30.03.02 15:33
Оценка:
Здравствуйте senatc, Вы писали:

S>Вот и решил глянуть — что за ошибка... Тут и уткнулся...


Чтобы посмотреть, что за ошибка, в отладчике, можно в окно Watch вписать такое:
@err,hr
, и ты получишь номер и текст последней Win32-ошибки. И никаких мэссажбоксов не надо.
Алексей Кирдин
Re[5]: Новичок: Как решить проблему с MessageBox?
От: Курилка Россия http://kirya.narod.ru/
Дата: 30.03.02 15:34
Оценка:
Здравствуйте senatc, Вы писали:
S>Да, виновен! Извиняюсь. Но как отредактировать сообщение — пока не знаю. Первый 0, я так понимаю, оценка? Если да, то видимо что-то не так сделал. Вроде как на 3 нажимал... (сорри, пока не разобрался, как это все тут работает). Ну не созла, честное слово! Каюсь дважды. От оценок пока буду воздерживаться. За "л" вообще стыдно . Снова извиняюсь.

да чё там — все здесь свои, обижаться — грех...
S>А не помогло не в смысле ответов, а в смысле контекста. Сижу, ковыряю тут MSDNовские примерчики. На экранчик выводится битмап, у которого можно менять размер рамки и перетаскивать по экрану. Размер битмапа прописан явно (0, 0, 32, 32). Ну вот и попытался унифицировать — как и ожидалось — ничего не получилось .
S>
S>hbmp = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP)); 
S>...
S>bRes = GetBitmapDimensionEx(hbmp, lpBmpDim);
S>...
S>if (bRes) {
S>    lbmpcx = lpBmpDim->cx;
S>    lbmpcy = lpBmpDim->cy;
S>}
S>...
S>SetRect(&rcBmp, 1, 1, 34, 34); 
S>


как обзывается-то пример? У меня тут ещё полчаса есть, гляну, если успею.
Re[6]: Новичок: Как решить проблему с MessageBox?
От: senatc Россия http://www.clubwise.com
Дата: 30.03.02 15:38
Оценка:
Здравствуйте Kaa, Вы писали:
Kaa>Здравствуйте senatc, Вы писали:
S>>Вот и решил глянуть — что за ошибка... Тут и уткнулся...
Kaa>Чтобы посмотреть, что за ошибка, в отладчике, можно в окно Watch вписать такое:
Kaa>
@err,hr
, и ты получишь номер и текст последней Win32-ошибки. И никаких мэссажбоксов не надо.



Да у Рихтера утилитка есть — в ней и посмотрел:

183: Cannot create a file when that file already exists.

Сергей
---
Sergey V. Natarov
Re[6]: Новичок: Как решить проблему с MessageBox?
От: Аноним  
Дата: 30.03.02 15:42
Оценка:
Кирилл,

К>да чё там — все здесь свои, обижаться — грех...


:)

К>как обзывается-то пример? У меня тут ещё полчаса есть, гляну, если успею. :)


Честно говоря — нашел его случайно. Лазал по функциям, щелкнул на экзампл, появилась WinProc. Ее и стал корежить...

Это она в полный рост, но уже с моими каракулями... :)

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    HDC hdc;                 // device context (DC) for window 
    RECT rcTmp;              // temporary rectangle 
    PAINTSTRUCT ps;          // paint data for BeginPaint and EndPaint 
    POINT ptClientUL;        // client area upper left corner 
    POINT ptClientLR;        // client area lower right corner 
    static HDC hdcCompat;    // DC for copying bitmap 
    static POINT pt;         // x and y coordinates of cursor 
    static RECT rcBmp;       // rectangle that encloses bitmap 
    static RECT rcTarget;    // rectangle to receive bitmap 
    static RECT rcClient;    // client-area rectangle 
    static BOOL fDragRect;   // TRUE if bitmap rect. is dragged 
    static HBITMAP hbmp;     // handle of bitmap to display 
    static HBRUSH hbrBkgnd;  // handle of background-color brush 
    static COLORREF crBkgnd; // color of client-area background 
    static HPEN hpenDot;     // handle of dotted pen
    static LPSIZE lpBmpDim;
    static LONG lbmpcx, lbmpcy;
    BOOL bRes;
    DWORD lasterr;
    TCHAR buf[0x100];//íà âñÿêèé ñëó÷àé

 
    switch (uMsg) 
    { 
        case WM_CREATE: 
 
            // Load the bitmap resource. 
 
            hbmp = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP)); 
 
            // Create a device context (DC) to hold the bitmap. 
            // The bitmap is copied from this DC to the window's DC 
            // whenever it must be drawn. 
 
            hdc = GetDC(hwnd); 
            hdcCompat = CreateCompatibleDC(hdc); 
            SelectObject(hdcCompat, hbmp); 

            bRes = GetBitmapDimensionEx(hbmp, lpBmpDim);
            lasterr=GetLastError();

            if (lasterr) {
                wsprintf( buf, "Îøèáêà!\nÊîä îøèáêè - %u\n", lasterr );
                MessageBox(hwnd,buf,"Error",0);
            }

            if (bRes) {
                lbmpcx = lpBmpDim->cx;
                lbmpcy = lpBmpDim->cy;
                MessageBox(hwnd,"Got it successfully","Size of Bitmap",0);
            } else {
                MessageBox(hwnd,"Can't get Bitmap size","Error",0);
            }

            if (!hbmp) {
                MessageBox(hwnd, "Can't load bitmap from resource", "Error", 0);
            }
 
            // Create a brush of the same color as the background 
            // of the client area. The brush is used later to erase 
            // the old bitmap before copying the bitmap into the 
            // target rectangle. 
 
            crBkgnd = GetBkColor(hdc); 
            hbrBkgnd = CreateSolidBrush(crBkgnd); 
            ReleaseDC(hwnd, hdc); 
 
            // Create a dotted pen. The pen is used to draw the 
            // bitmap rectangle as the user drags it. 
 
            hpenDot = CreatePen(PS_DOT, 1, RGB(160, 160, 160)); 
 
            // Set the initial rectangle for the bitmap. Note that 
            // this application supports only a 32- by 32-pixel 
            // bitmap. The rectangle is slightly larger than the 
            // bitmap. 
 
            SetRect(&rcBmp, 1, 1, 34, 34); 
            return 0; 
 
        case WM_PAINT: 
 
            // Draw the bitmap rectangle and copy the bitmap into 
            // it. The 32-pixel by 32-pixel bitmap is centered 
            // in the rectangle by adding 1 to the left and top 
            // coordinates of the bitmap rectangle, and subtracting 2 
            // from the right and bottom coordinates. 
 
            BeginPaint(hwnd, &ps); 
            Rectangle(ps.hdc, rcBmp.left, rcBmp.top, 
                rcBmp.right, rcBmp.bottom); 
            StretchBlt(ps.hdc, rcBmp.left + 1, rcBmp.top + 1, 
                (rcBmp.right - rcBmp.left) - 2, 
                (rcBmp.bottom - rcBmp.top) - 2, hdcCompat, 
                0, 0, 32, 32, SRCCOPY); 
            EndPaint(hwnd, &ps); 
            break; 
 
        case WM_MOVE: 
        case WM_SIZE: 
 
            // Convert the client coordinates of the client-area 
            // rectangle to screen coordinates and save them in a 
            // rectangle. The rectangle is passed to the ClipCursor 
            // function during WM_LBUTTONDOWN processing. 
 
            GetClientRect(hwnd, &rcClient); 
            ptClientUL.x = rcClient.left; 
            ptClientUL.y = rcClient.top; 
            ptClientLR.x = rcClient.right; 
            ptClientLR.y = rcClient.bottom; 
            ClientToScreen(hwnd, &ptClientUL); 
            ClientToScreen(hwnd, &ptClientLR); 
            SetRect(&rcClient, ptClientUL.x, ptClientUL.y, 
                ptClientLR.x, ptClientLR.y); 
            return 0; 
 
        case WM_LBUTTONDOWN: 
 
            // Restrict the mouse cursor to the client area. This 
            // ensures that the window receives a matching 
            // WM_LBUTTONUP message. 
 
            ClipCursor(&rcClient); 
 
            // Save the coordinates of the mouse cursor. 
 
            pt.x = (LONG) LOWORD(lParam); 
            pt.y = (LONG) HIWORD(lParam); 
 
            // If the user has clicked the bitmap rectangle, redraw 
            // it using the dotted pen. Set the fDragRect flag to 
            // indicate that the user is about to drag the rectangle. 
 
            if (PtInRect(&rcBmp, pt)) 
            { 
                hdc = GetDC(hwnd); 
                SelectObject(hdc, hpenDot); 
                Rectangle(hdc, rcBmp.left, rcBmp.top, rcBmp.right, 
                    rcBmp.bottom); 
                fDragRect = TRUE; 
                ReleaseDC(hwnd, hdc); 
            } 
            return 0; 
 
        case WM_MOUSEMOVE: 
 
            // Draw a target rectangle or drag the bitmap rectangle, 
            // depending on the status of the fDragRect flag. 
 
            if ((wParam && MK_LBUTTON) 
                    && !fDragRect) 
            {
                // Set the mix mode so that the pen color is the 
                // inverse of the background color. The previous 
                // rectangle can then be erased by drawing 
                // another rectangle on top of it. 
 
                hdc = GetDC(hwnd); 
                SetROP2(hdc, R2_NOTXORPEN); 
 
                // If a previous target rectangle exists, erase 
                // it by drawing another rectangle on top of it. 
 
                if (!IsRectEmpty(&rcTarget)) 
                { 
                    Rectangle(hdc, rcTarget.left, rcTarget.top, 
                        rcTarget.right, rcTarget.bottom); 
                } 
 
                // Save the coordinates of the target rectangle. Avoid 
                // invalid rectangles by ensuring that the value of 
                // the left coordinate is greater than that of the 
                // right coordinate, and that the value of the bottom
                // coordinate is greater than that of the top.
 
                if ((pt.x < (LONG) LOWORD(lParam)) && 
                        (pt.y > (LONG) HIWORD(lParam))) 
                {
                    SetRect(&rcTarget, pt.x, HIWORD(lParam), 
                        LOWORD(lParam), pt.y); 
                }
                else if ((pt.x > (LONG) LOWORD(lParam)) && 
                        (pt.y > (LONG) HIWORD(lParam))) 
                {
                    SetRect(&rcTarget, LOWORD(lParam), 
                        HIWORD(lParam), pt.x, pt.y); 
                }
                else if ((pt.x > (LONG) LOWORD(lParam)) && 
                        (pt.y < (LONG) HIWORD(lParam))) 
                { 
                    SetRect(&rcTarget, LOWORD(lParam), pt.y, 
                        pt.x, HIWORD(lParam)); 
                }
                else 
                {
                    SetRect(&rcTarget, pt.x, pt.y, LOWORD(lParam), 
                        HIWORD(lParam)); 
                }
 
                // Draw the new target rectangle. 
 
                Rectangle(hdc, rcTarget.left, rcTarget.top, 
                    rcTarget.right, rcTarget.bottom); 
                ReleaseDC(hwnd, hdc); 
            } 
            else if ((wParam && MK_LBUTTON) 
                    && fDragRect) 
            {
 
                // Set the mix mode so that the pen color is the 
                // inverse of the background color. 
 
                hdc = GetDC(hwnd); 
                SetROP2(hdc, R2_NOTXORPEN); 
 
                // Select the dotted pen into the DC and erase 
                // the previous bitmap rectangle by drawing 
                // another rectangle on top of it. 
 
                SelectObject(hdc, hpenDot); 
                Rectangle(hdc, rcBmp.left, rcBmp.top, 
                    rcBmp.right, rcBmp.bottom); 
 
                // Set the new coordinates of the bitmap rectangle, 
                // then redraw it. 
 
                OffsetRect(&rcBmp, LOWORD(lParam) - pt.x, 
                    HIWORD(lParam) - pt.y); 
                Rectangle(hdc, rcBmp.left, rcBmp.top, 
                    rcBmp.right, rcBmp.bottom); 
                ReleaseDC(hwnd, hdc); 
 
                // Save the coordinates of the mouse cursor. 
 
                pt.x = (LONG) LOWORD(lParam); 
                pt.y = (LONG) HIWORD(lParam); 
            } 
            return 0; 
 
        case WM_LBUTTONUP: 
 
            // If the bitmap rectangle and target rectangle 
            // intersect, copy the bitmap into the target 
            // rectangle. Otherwise, copy the bitmap into the 
            // rectangle bitmap at its new location. 
 
            if (IntersectRect(&rcTmp, &rcBmp, &rcTarget)) 
            { 
 
                // Erase the bitmap rectangle by filling it with 
                // the background color. 
 
                hdc = GetDC(hwnd); 
                FillRect(hdc, &rcBmp, hbrBkgnd); 
 
                // Redraw the target rectangle because the part 
                // that intersected with the bitmap rectangle was 
                // erased by the call to FillRect. 
 
                Rectangle(hdc, rcTarget.left, rcTarget.top, 
                    rcTarget.right, rcTarget.bottom); 
 
                // Copy the bitmap into the target rectangle. 
 
                StretchBlt(hdc, rcTarget.left + 1, rcTarget.top + 1, 
                    (rcTarget.right - rcTarget.left) - 2, 
                    (rcTarget.bottom - rcTarget.top) - 2, hdcCompat, 
                    0, 0, 32, 32, SRCCOPY); 
 
                // Copy the target rectangle to the bitmap 
                // rectangle, set the coordinates of the target 
                // rectangle to 0, then reset the fDragRect flag. 
 
                CopyRect(&rcBmp, &rcTarget); 
                SetRectEmpty(&rcTarget); 
                ReleaseDC(hwnd, hdc); 
                fDragRect = FALSE; 
            } 
 
            else if (fDragRect) 
            { 
 
                // Draw the bitmap rectangle, copy the bitmap into 
                // it, and reset the fDragRect flag. 
 
                hdc = GetDC(hwnd); 
                Rectangle(hdc, rcBmp.left, rcBmp.top, 
                    rcBmp.right, rcBmp.bottom); 
                StretchBlt(hdc, rcBmp.left + 1, rcBmp.top + 1, 
                    (rcBmp.right - rcBmp.left) - 2, 
                    (rcBmp.bottom - rcBmp.top) - 2, hdcCompat, 
                    0, 0, 32, 32, SRCCOPY); 
                ReleaseDC(hwnd, hdc); 
                fDragRect = FALSE; 
            } 
 
            // Release the mouse cursor. 
 
            ClipCursor((LPRECT) NULL); 
            return 0; 
 
        case WM_DESTROY: 
 
            // Destroy the background brush, compatible bitmap, 
            // and the bitmap. 
 
            DeleteObject(hbrBkgnd); 
            DeleteDC(hdcCompat); 
            DeleteObject(hbmp); 
            PostQuitMessage(0); 
            break; 
 
        default: 
            return DefWindowProc(hwnd, uMsg, wParam, lParam); 
    } 
    return (LRESULT) NULL; 
}
Re[2]: Новичок: Как решить проблему с MessageBox?
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.03.02 17:18
Оценка:
Здравствуйте Курилка, Вы писали:

К>примерно так

TCHAR buf[256];//на всякий случай
wsprintf("Код ошибки - %d", lasterr)
::MessageBox(NULL, buf, "Ошибка", MB_OK)

К>только это будет код в виде числа

Мужитки! В своем коде можете конечно и так писать, но когда даете пример начинающим, то потрудитесь не давать безграмотного кода.

Что стоило в этом примере заключить строковые константы в макрос "_T()"? Вот так:
TCHAR buf[256]; //на всякий случай
wsprintf(_T("Код ошибки - %d"), lasterr);
::MessageBox(NULL, buf, _T("Ошибка"), MB_OK);


Ведь отсуствие точек с запятой вам компилятор проверит, а вот неправитьность типов выявится только тогда когда в срочном порядке нужно будет скомпилировать проект в UNICODE.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Новичок: Как решить проблему с MessageBox?
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 30.03.02 18:51
Оценка:
Здравствуйте Я и VladD2, Вы писали:

Kaa>    wsprintf( buf, _T("Ошибка!\nКод ошибки - %u\n"), dwErr );

Я помнил, что я тут облажался, но пришел злой начальник... Спасибо, Влад, за напоминание. Пока не увидел твое сообщение, и не вспомнил. Жаль.

С уважением
Алексей Кирдин
Re: Новичок: Как решить проблему с MessageBox?
От: ioni Россия  
Дата: 30.03.02 19:04
Оценка:
Здравствуйте senatc, Вы писали:

S>

S>Начал изучать VC++ (жизнь заставила). Все вроде как постепенно получается. Но уткнулся в тупую проблему и на вскидку нигде не могу найти решения. Поскажите — кто может.

S>Пример, можно сказать, академический.


S>Есть у меня переменная "DWORD lasterr;", который получает код ошибки:


S>lasterr=GetLastError();


S>Все работает замечательно. Суть моей тупой проблемы — как вывести этот код в MessageBox? Компилер ругается, а как это сделать я не знаю. Ну чтоб было что-то типа


S>"Ошибка"

S>"Код ошибки — <lasterr здесь>"
S><OK>

S>Ну никак не пойму, как это сделать!


S>Заранее спасибо,

S>Сергей


если пользуешь VC то можно использовать
_com_error он нормально выдает код ошибки

TCHAR *p = _com_error(GetLastError()),ErrorMessage()
Re[2]: Новичок: Как решить проблему с MessageBox?
От: ua1zcl Россия www.alexklm.ru
Дата: 31.03.02 17:44
Оценка:
Здравствуйте senatc, ещё один вариант:


void Gle(void)// GetLastError with MessageBox and formated string
{  char szErr[260];
 FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,NULL,GetLastError(),
       MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),szErr,260,NULL);
 MessageBox(GetActiveWindow(),szErr,"Ошибка",MB_OK|MB_ICONWARNING);
 return;
}
Александр
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.