Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
6 / 5 / 1
Регистрация: 02.10.2011
Сообщений: 111
1

Открытие/закрытие окна по нажатию/отжатию левой кнопки мыши

25.08.2012, 15:50. Показов 3044. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно чтобы программа выполняла открытие дочернего окна при нажатии левой кнопки мыши, а при отжатии закрывала дочернее окно. У меня почему-то закрывается и дочернее и главное окно. Помогите пожалуйста разобраться, что я не так делаю?
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
#include <windows.h>
 
BOOL RegClass(WNDPROC,LPCTSTR,UINT);
 
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
 
HINSTANCE hInstance; 
 
char szWindowClass[]="ButtonWindow",szDClass[]="DClass",szTitle[]="ButtonExample";
 
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance,LPSTR lpszCmdLine, int CmdShow)
{
    MSG msg; hInstance=hInst;HWND hwnd;
    if(!RegClass(WndProc,szWindowClass,COLOR_WINDOW))
        return FALSE;
    if(!RegClass(WndProc,szDClass,COLOR_WINDOW+1))
        return FALSE;
    hwnd=CreateWindow(szWindowClass,szTitle,
        WS_OVERLAPPEDWINDOW | WS_VISIBLE,
        CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
        CW_USEDEFAULT,0,0,hInstance, NULL);
    if(!hwnd) return FALSE;
    while(GetMessage(&msg,0,0,0))
        DispatchMessage(&msg);
    return msg.wParam;
}
 
BOOL RegClass(WNDPROC Proc, LPCTSTR szName,UINT brBackground)
{
    WNDCLASS wc;
    wc.style=wc.cbClsExtra=wc.cbWndExtra=0;
    wc.lpfnWndProc=Proc;
    wc.hInstance=hInstance;
    wc.hIcon=LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc.hbrBackground=(HBRUSH)(brBackground+1);
    wc.lpszMenuName=(LPCTSTR)NULL;
    wc.lpszClassName=szName;
    return (RegisterClass(&wc)!=0);
}
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    static cxClient,cyClient,yStep,xStep,left,top,Width,Height;
    static HWND hwnds;
    static char szTitle1[]="Daughter";
    static RECT rc;
    switch(msg)
    {
    case WM_CREATE:
        {
            yStep=GetSystemMetrics(SM_CYCAPTION);
            return 0;
        }
    case WM_LBUTTONDOWN:
        {
                GetWindowRect(hwnd,&rc);
                left=rc.left;
                top=rc.top;
                hwnds=CreateWindow(szDClass,szTitle1,WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                    left,top,500,400,0,0,hInstance,0);
                return 0;
        }
    case WM_LBUTTONUP:
        {
            DestroyWindow(hwnds);
            return 0;
        }
    case WM_DESTROY:
        {
            PostQuitMessage(0);
            return 0;
        }
    }
    return DefWindowProc(hwnd,msg,wParam,lParam);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.08.2012, 15:50
Ответы с готовыми решениями:

Действия при нажатии левой(правой) кнопки мыши в рабочей области окна
Нужно Написать Win32API. Что бы правая и левая кнопка мыши выполняли действия написанные в...

При нажатии левой кнопки мыши в поле первого окна, открывать второе
Подскажите пожалуйста, как сделать, чтоб при нажатии левой кнопки мыши в поле первого окна,...

Нажатие левой кнопки мыши
господа создаю основное окно , а затем с этим же классом создаю дочернее окно вот так #include...

Программное нажатие левой кнопки мыши
Господа, кто нить подскажет как можно заставить программу нажимать левую кнопку мыши. Пробовал...

1
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,928
25.08.2012, 17:14 2
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
#include <windows.h>
 
BOOL RegClass(WNDPROC,LPCTSTR,UINT);
 
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
 
HINSTANCE hInstance; 
 
char szWindowClass[]="ButtonWindow",szDClass[]="DClass",szTitle[]="ButtonExample";
 
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance,LPSTR lpszCmdLine, int CmdShow)
{
    MSG msg; hInstance=hInst;HWND hwnd;
    if(!RegClass(WndProc,szWindowClass,COLOR_WINDOW))
        return FALSE;
    if(!RegClass(WndProc,szDClass,COLOR_WINDOW+1))
        return FALSE;
    hwnd=CreateWindow(szWindowClass,szTitle,
        WS_OVERLAPPEDWINDOW | WS_VISIBLE,
        CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
        CW_USEDEFAULT,0,0,hInstance, NULL);
    if(!hwnd) return FALSE;
    while(GetMessage(&msg,0,0,0))
        DispatchMessage(&msg);
    return msg.wParam;
}
 
BOOL RegClass(WNDPROC Proc, LPCTSTR szName,UINT brBackground)
{
    WNDCLASS wc;
    wc.style=wc.cbClsExtra=wc.cbWndExtra=0;
    wc.lpfnWndProc=Proc;
    wc.hInstance=hInstance;
    wc.hIcon=LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc.hbrBackground=(HBRUSH)(brBackground+1);
    wc.lpszMenuName=(LPCTSTR)NULL;
    wc.lpszClassName=szName;
    return (RegisterClass(&wc)!=0);
}
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    static int cxClient,cyClient,yStep,xStep,left,top,Width,Height;
    static HWND hwnds;
    static char szTitle1[]="Daughter";
    static RECT rc;
    switch(msg)
    {
    case WM_CREATE:
        {
            yStep=GetSystemMetrics(SM_CYCAPTION);
            return 0;
        }
    case WM_LBUTTONDOWN:
        {
                GetWindowRect(hwnd,&rc);
                left=rc.left;
                top=rc.top;
                hwnds=CreateWindow("STATIC",szTitle1,WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                    left,top,500,400,0,0,hInstance,0);
                return 0;
        }
    case WM_LBUTTONUP:
        {
            DestroyWindow(hwnds);
            return 0;
        }
    case WM_DESTROY:
        {
            PostQuitMessage(0);
            return 0;
        }
    }
    return DefWindowProc(hwnd,msg,wParam,lParam);
}
Проблема скорей всего в том, что в двух классах используется одна оконная процедура. Дочернее окно с другим классом работает.
0
25.08.2012, 17:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2012, 17:14
Помогаю со студенческими работами здесь

Зажатие левой кнопки мыши консоль
Как узнать, что кнопка мыши отпущена? Но мне нужно по нажатию начать что-то делать и по отпусканию...

Закрытие окна по нажатию IDCANCEL
Здравствуйте! Мне надо, чтобы окно программы закрывалось по нажатию кнопки idcancel(красный крестик...

Симуляция нажатия левой кнопки мыши в другом окне
Есть программа (написана на C# - Windows form app) мне нужно послать нажатие лкм по координатам...

Увеличение размера строки при нажатии левой кнопки мыши
Хочу выведенную строку увеличивать (размер шрифта) при нажатии левой кнопки мыши. Но ничего не...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru