Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вывести текст ссылку в Static 
:(
    Опции темы
ZC1989
  Дата 2.5.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: 1
Всего: 1



есть статик, нужно вывести в нём текст, где только некоторые куски текста быдут выполнять роль кнопок... так же, хотелось бы что бы они были другого цвета и меняли его при наведении мышки... вот 2 вопроса, прошу объяснить на пальцах... так как слабо понимаю как можно это сделать....


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Earnest
Дата 2.5.2007, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



В статике не получится: во-первых он не умеет менять цвет текста отдельно для символов, во-вторых, не реагирует на мышь. Используй РичЭдит или пиши все с нуля.


--------------------
...
PM   Вверх
ZC1989
Дата 2.5.2007, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: 1
Всего: 1



Earnest, облом... а где подробно про ричи почитать и как с ними рабоать? (ни разу не кавырялся с ними)


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Earnest
Дата 2.5.2007, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



В MSDN, в этом форуме, примеры на codeproject и т.д.


--------------------
...
PM   Вверх
586
Дата 2.5.2007, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



можно юзать контрол SysLink

http://msdn.microsoft.com/library/default....ink/syslink.asp

PS: это требует библиотеки comctl32.dll ver 6.0 и более => нужен манифест

Это сообщение отредактировал(а) 586 - 2.5.2007, 20:19

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  syslink.rar 28,98 Kb
PM   Вверх
ZC1989
Дата 2.5.2007, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: 1
Всего: 1



586, пасибо ОГРОМНОЕ!! попробовал по образцу замутить... получилось, только вот вопрос остался... у меня получется что сообщение индовсу отправлятся что ли? а я-то хочу что б это было сообщение окну создателю...   в идеале должно быть так, ссылка эта указывает на рисунок и когда нажимается она, то открывается окно с тем рисунком...   желательно что б появляющее окно было детёнышем того, в котором нажали ссылку.... smile 


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
ZC1989
Дата 2.5.2007, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: 1
Всего: 1



ещё вот одна фишка... немнога распотрашил этот пример... сделал так
Код

#include <windows.h>
#include <commctrl.h>
#include ".\\resource.h"


#define MAX_LINKID_TEXT    48
#define L_MAX_URL_LENGTH 2083


HWND        H_Cuts;


typedef struct tagLITEM {
    UINT mask;
    int iLink;
    UINT state;
    UINT stateMask;
    char szID[MAX_LINKID_TEXT];
    char szUrl[L_MAX_URL_LENGTH];
} LITEM, *PLITEM;


typedef struct tagNMLINK {
    NMHDR hdr;
    LITEM item;
} NMLINK, *PNMLINK;


void OnNotify(HWND hWnd, NMHDR *pNMHdr)
{
  switch (pNMHdr->code)
  {
  case NM_RETURN:
  case NM_CLICK:
  {
    PNMLINK pNMLink = (PNMLINK) pNMHdr;

    ShellExecute(hWnd, (LPCSTR)"open", pNMLink->item.szUrl, 0, 0, SW_SHOWNORMAL);
    break;
  }
  }
}


BOOL    CALLBACK    DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, long lParam)
{
  switch(uMsg)
  {
  case WM_INITDIALOG:
      H_Cuts    =    GetDlgItem(hWnd, ID_Test);
      SetWindowText(H_Cuts,  "<a href=\"http://forum.vingrad.ru\">LINK</a>");
      break;

  case WM_CLOSE:
      EndDialog(hWnd, 0);
      break;

  case WM_NOTIFY:
      OnNotify(hWnd, (NMHDR*)lParam);
      break;
  }

  return 0;
}


int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hPrevInst, LPSTR lpCmdLine, INT uCmdShow)
{
    LoadLibrary("comctl32.dll");
    DialogBox(hinst, (LPCTSTR)IDD_DIALOG, 0, DialogProc);

    return 0;
}


а глюк такой... когда нажимается ссылка, то не открывается и-нет експлорер...а открывается папка в которой лежит ЕХЕшник...


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
586
Дата 2.5.2007, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Код
#include <windows.h>
#include <commctrl.h>
#include ".\\resource.h"


#define MAX_LINKID_TEXT    48
#define L_MAX_URL_LENGTH 2083


HWND        H_Cuts;


typedef struct tagLITEM {
    UINT mask;
    int iLink;
    UINT state;
    UINT stateMask;
    WCHAR szID[MAX_LINKID_TEXT];
    WCHAR szUrl[L_MAX_URL_LENGTH];
} LITEM, *PLITEM;

typedef struct tagNMLINK {
    NMHDR hdr;
    LITEM item;
} NMLINK, *PNMLINK;


void OnNotify(HWND hWnd, NMHDR *pNMHdr)
{
  switch (pNMHdr->code)
  {
  case NM_RETURN:
  case NM_CLICK:
  {
    PNMLINK pNMLink = (PNMLINK) pNMHdr;

    ShellExecuteW(hWnd, 0, pNMLink->item.szUrl, 0, 0, SW_SHOWNORMAL);
    break;
  }
  }
}


BOOL    CALLBACK    DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, long lParam)
{
  switch(uMsg)
  {
  case WM_INITDIALOG:
      SetDlgItemText(hWnd, 10, "<a href=\"http://forum.vingrad.ru\">LINK</a>");
      break;

  case WM_CLOSE:
      EndDialog(hWnd, 0);
      break;

  case WM_NOTIFY:
      OnNotify(hWnd, (NMHDR*)lParam);
      break;
  }

  return 0;
}


int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hPrevInst, LPSTR lpCmdLine, INT uCmdShow)
{
    DialogBox(hinst, (LPCTSTR)100, 0, DialogProc);
    return 0;
}

Не переделывай структуру LITEM!!! Она всегда в Unicode!

PS: я тут написал структуры, потому у меня что старые заголовки (VC++ 6). В новых этого делать не нужно.
PM   Вверх
ZC1989
Дата 2.5.2007, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: 1
Всего: 1



586, ну допустим тут разобрался... а как сделать чтоб сообщения шли от этой ссылки в процедуру окна так же как и отнажатия простого Боттона?


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
586
Дата 2.5.2007, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(ZC1989 @  2.5.2007,  23:51 Найти цитируемый пост)
а как сделать чтоб сообщения шли от этой ссылки в процедуру окна так же как и отнажатия простого Боттона

Если только послать SendMessage(hWnd, WM_COMMAND, cmd_id, 0), только смысла нет. Какая разница в каком месте будет код.

Код
#include <windows.h>
#include <commctrl.h>
#include ".\\resource.h"


#define MAX_LINKID_TEXT    48
#define L_MAX_URL_LENGTH 2083

typedef struct tagLITEM {
    UINT mask;
    int iLink;
    UINT state;
    UINT stateMask;
    WCHAR szID[MAX_LINKID_TEXT];
    WCHAR szUrl[L_MAX_URL_LENGTH];
} LITEM, *PLITEM;

typedef struct tagNMLINK {
    NMHDR hdr;
    LITEM item;
} NMLINK, *PNMLINK;


void OnNotify(HWND hWnd, NMHDR *pNMHdr)
{
  switch (pNMHdr->code)
  {
  case NM_RETURN:
  case NM_CLICK:
  {
    PNMLINK pNMLink = (PNMLINK) pNMHdr;

    if(!lstrcmpW(pNMLink->item.szID, L"cmd1"))
    {
        // link is clicked
        MessageBoxA(hWnd, "link is clicked", "", 0);
    }
    break;
  }
  }
}


BOOL    CALLBACK    DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, long lParam)
{
  switch(uMsg)
  {
  case WM_INITDIALOG:
      SetDlgItemText(hWnd, 10, "<a id=\"cmd1\">LINK</a>");
      break;

  case WM_CLOSE:
      EndDialog(hWnd, 0);
      break;

  case WM_NOTIFY:
      OnNotify(hWnd, (NMHDR*)lParam);
      break;
  }

  return 0;
}


int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hPrevInst, LPSTR lpCmdLine, INT uCmdShow)
{
    DialogBox(hinst, (LPCTSTR)100, 0, DialogProc);
    return 0;
}

Кстати, такой контрол есть только в WinXP! Без особой нужды лучше его не использовать.

Это сообщение отредактировал(а) 586 - 2.5.2007, 23:02
PM   Вверх
ZC1989
Дата 2.5.2007, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: 1
Всего: 1



586, такой вариант мне больше уже нравится!  smile как раз можно сделать вариант на сообщениях...

Добавлено через 11 минут и 46 секунд
начинаю беситься с жиру... поэтому ещё вопрос... можно ли управлять настройками этой ссылки так же как это было в HTML? тоесть написать скажем таблицу стилей или ещё какую пакасть?


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1896 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.