Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
1184 / 540 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
1

Не отображается рамка окна

18.10.2011, 10:54. Показов 1162. Ответов 6
Метки нет (Все метки)

Почему-то во втором примере Петзольда у меня не отображается рамка окна, кнопки для управления окном (свернуть, развернуть, закрыть) да и само окно на панели задач + программа зависает судя по всему после запуска.
ОС: win 7 x64.

Код программы:
SYSMETS.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#define NUMLINES ((int) (sizeof sysmetrics / sizeof sysmetrics[0]))
 
struct
{
    int iIndex;
    char *szLabel;
    char *szDesc;
} sysmetrics[]=
{
    SM_CXSCREEN, "SM_CXSCREEN", "Screen width in pixels",
    SM_CYSCREEN, "SM_CYSCREEN", "Screen height in pixels",
    SM_CXVSCROLL, "SM_CXVSCROLL", "Vertical scroll arrow width",
    SM_CYHSCROLL, "SM_CYHSCROLL", "Horizontal scroll arrow height",
    SM_CYCAPTION, "SM_CYCAPTION", "Caption bar height",
    SM_CXBORDER, "SM_CXBORDER", "Window border width",
    SM_CYBORDER, "SM_CYBORDER", "WIndow border height",
    SM_CXDLGFRAME, "SM_CXDLGFRAME", "Dialog window fram width",
    SM_CYDLGFRAME, "SM_CYDLGFRAME", "Dialog window frame height",
    SM_CXHTHUMB, "SM_CXHTHUMB", "Horizontal scroll thumb width",
    SM_CXICON, "SM_CXICON", "Icon width",
    SM_CYICON, "SM_CYICON", "Icon height",
    SM_CXCURSOR, "SM_CXCURSOR", "Cursor width",
    SM_CYCURSOR, "SM_CYCURSOR", "Cursor heiht",
    SM_CYMENU, "SM_CYMENU", "Menu bar height",
    SM_CXFULLSCREEN, "SM_CXFULLSCREEN", "Full screen client area width",
    SM_CYFULLSCREEN, "SM_CYFULLSCREEN", "Full screen client area height",
    SM_CYKANJIWINDOW, "SM_CYKANJIWINDOW", "Kanji window height",
    SM_MOUSEPRESENT, "SM_MOUSEPRESENT", "Mouse present flag",
    SM_CYVSCROLL, "SM_CYVSCROLL", "Vertical scroll arrow width",
    SM_DEBUG, "SM_DEBUG", "Debug version flag",
    SM_SWAPBUTTON, "SM_SWAPBUTTON", "Mouse buttons swapped flag",
    SM_RESERVED1, "SM_RESERVED1", "Reserved",
    SM_RESERVED2, "SM_RESERVED2", "Reserved",
    SM_RESERVED3, "SM_RESERVED3", "Reserved",
    SM_RESERVED4, "SM_RESERVED4", "Reserved",
    SM_CXMIN, "SM_CXMIN", "Minimum window width",
    SM_CYMIN, "CM_CYMIN", "Minimum window height",
    SM_CXSIZE, "SM_CXSIZE", "Minimize/Maximize icon width",
    SM_CYSIZE, "SM_CYSIZE", "Minimize/Maximize icon height",
    SM_CXFRAME, "SM_CXFRAME", "Window frame width",
    SM_CYFRAME, "SM_CYFRAME", "Window frame height",
    SM_CXMINTRACK, "SM_CXMINTACK", "Minimum window tracking width",
    SM_CYMINTRACK, "SM_CYMINTRACK", "Minimum window tracking height",
    SM_CXDOUBLECLK, "SM_CXDOUBLECLK", "Double click x tolerance",
    SM_CYDOUBLECLK, "SM_CYDOUBLECLK", "Souble ckick y tolerance",
    SM_CXICONSPACING, "SM_CXICONSPACING", "Horizontal icon spacing",
    SM_CYICONSPACING, "SM_CYICONSPACING", "Vertical icon spacing",
    SM_MENUDROPALIGNMENT, "SM_MENUDROPALIGNMENT", "Left or right menu drop",
    SM_PENWINDOWS, "SM_PENWINDOWS", "Pen extensions installed",
    SM_DBCSENABLED, "SM_DBCSENABLED", "Double-Byte Char Set enabled",
    SM_CMOUSEBUTTONS, "SM_CMOUSEBUTTONS", "Number of mouse buttons",
    SM_SHOWSOUNDS, "SM_SHOWSOUNDS", "Present sounds visually"
};
SYSMETS1.CPP (для тестирования программы)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <windows.h>
#include <string>
#include "SYSMETS.h"
 
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
 
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    static char szAppName[]="SysMets1";
    HWND hwnd;
    MSG msg;
    WNDCLASSEX wndclass;
 
    wndclass.cbSize = sizeof(wndclass);
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = WndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = hInstance;
    wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
    wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = szAppName;
    wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
 
    RegisterClassEx(&wndclass);
 
    hwnd=CreateWindow(
                      szAppName,
                      "Get System Metrics No. 1",
                      WS_OVERLAPPEDWINDOW,
                      CW_USEDEFAULT,CW_USEDEFAULT,
                      CW_USEDEFAULT,CW_USEDEFAULT,
                      NULL, NULL, hInstance, NULL
                      );
    ShowWindow(hwnd,iCmdShow);
    UpdateWindow(hwnd);
 
    while (GetMessage (&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}
 
 
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    static int cxChar, cxCaps, cyChar;
    char szBuffer[10];
    HDC hdc;
    int i;
    PAINTSTRUCT ps;
    TEXTMETRIC tm;
 
    switch (iMsg)
    {
        case WM_CREATE:
        hdc=GetDC(hwnd);
        GetTextMetrics(hdc,&tm);
        cxChar=tm.tmAveCharWidth;
        cxCaps=(tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar/2;
        cyChar=tm.tmHeight + tm.tmExternalLeading;
 
        ReleaseDC(hwnd,hdc);
        return 0;
 
        case WM_PAINT:
            hdc=BeginPaint(hwnd,&ps);
            for(i=0;i<NUMLINES;i++)
            {
                TextOut(hdc,cxChar,cyChar*(i+1),sysmetrics[i].szLabel,
                        strlen(sysmetrics[i].szLabel));
                TextOut(hdc,cxChar+22*cxCaps,cyChar*(1+i),
                        sysmetrics[i].szDesc,strlen(sysmetrics[i].szDesc));
                SetTextAlign(hdc, TA_RIGHT | TA_TOP);
                TextOut(hdc,cxChar+22*cxCaps+40*cxChar,cyChar*(1+i),
                        szBuffer,wsprintf(szBuffer,"%5d",GetSystemMetrics(sysmetrics[i].iIndex)));
                SetTextAlign(hdc,TA_LEFT|TA_TOP);
            }
            EndPaint(hwnd,&ps);
            return 0;
 
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
 
            return DefWindowProc(hwnd,iMsg,wParam,lParam);
    }
}
Миниатюры
Не отображается рамка окна  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2011, 10:54
Ответы с готовыми решениями:

Рамка окна после SetWindowPos
Есть следующий код (только та часть, где проявляется баг). Окошко создается из ресурсов, и если...

Почему рамка не отображается у края окна, в левом верхнем углу, а со смещением?
&lt;html&gt; &lt;head&gt; &lt;meta charset=&quot;utf-8&quot;&gt; &lt;title&gt;Мой сайт&lt;/title&gt; &lt;style&gt; *{ matgin:0; ...

Не отображается рамка у таблицы в браузере
Добрый вечер. Имеется файл test.xml и шаблон test.xsl. При использовании oXygen html editor,...

Не отображается рамка вокруг thead
Собственно, сабж. Пишу правило: table.ref-table thead { border: 1px solid #dcdcdc; } ...

6
555 / 509 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
18.10.2011, 10:58 2
почитай о стилях:

C++
1
wndclass.style = CS_HREDRAW | CS_VREDRAW;
0
1184 / 540 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
18.10.2011, 17:33  [ТС] 3
novi4ok, ну ты выделил строку по поводу того что окно будет обновлятся при изменении размеров окна и что? В предыдущем тестовом примере выводящем текст тоже был установлен такой параметр и оно отображалось.

Добавлено через 6 часов 19 минут
Эмм, неужели никто не знает? Это ведь всего лишь второй пример в книге Петзольда.
0
Brainsbreaker
896 / 372 / 52
Регистрация: 01.02.2011
Сообщений: 1,592
18.10.2011, 21:11 4
Gepar, а Петзольда по-другому и компилятор не ворчал:
C++
1
2
3
4
5
6
case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc (hwnd, iMsg, wParam, lParam);
}
1
1184 / 540 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
18.10.2011, 21:37  [ТС] 5
Digit@ll, так, теперь работает, это я сглупил - переписывал слово в слово из книжки, надо было подумать что без default то ветка последняя не исполнится.
Но тем не менее: создавать окно у меня можно, обновлять тоже можно, а что именно тогда отправлялось окну такого что оно не могло отобразиться изначально как окно и зависало?
P.S В разделе по интерфейсу так тихо и пусто В разделе с++ для начинающих полно тем и полно ответов каждый день, там есть что почитать новенького, а здесь тишина .
0
Brainsbreaker
896 / 372 / 52
Регистрация: 01.02.2011
Сообщений: 1,592
18.10.2011, 22:29 6
Ключевое слово ворчал: warning C4715: 'WndProc' : not all control paths return a value, что предельно ясно, а так тоже окно было 1:1 с тем, что ты выложил.
0
1184 / 540 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
18.10.2011, 23:00  [ТС] 7
Digit@ll, у меня компилятор не ворчал насчёт этого, зато сделал кучу предупреждений по инициализации структуры
Код
C:\c++\Projects\WinProjInCodeBlocks\SYSMETS.h|8|warning: non-local variable '<anonymous struct> sysmetrics []' uses anonymous type|
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.10.2011, 23:00

Рамка для картинки img не отображается на сайте
Здравствуйте. В css стиле вначале не было рамки p IMG {float:left; margin: 7px 7px 7px 7px;...

Таблица: почему рамка отображается только в средней ячейке?
у меня на сайте таблица не отображется в должном виде. должна делать 3 ячейки в ширину страницы и...

Рамка вокруг стороннего окна
Доброго времени суток. Дискриптор стороннего окна имеется. Нужно как то выделить это окно. Думаю...

При перетаскивании окна на рабочем столе отображается тень окна, как это убрать?
Помогите разобраться,при перетаскивании окна на рабочем столе отображается тень окна,как это...

Как передвигать форму если убрана рамка вокруг окна?
При помощи кода убрал рамку вокруг формы, но как теперь перетягивать форму в разные стороны?...

В Word 2007 красная рамка вокруг окна и документ не сохраняется
В Word 2007 красная рамка по периметру окна и документ не сохраняется. Т. е. выбираю &quot;соранить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru