Форум 3DNews
Вернуться   Форум 3DNews > Программирование > Программирование

Ответ Создать новую тему
Опции темы Опции просмотра
Непрочитано 31.07.2011, 17:13   [включить плавающее окно]   #1
zzz678
Мужской Новенький
Автор темы
 
Регистрация: 31.07.2011
проблемы с WM_CTLCOLOREDIT

вторые сутки чужу одно большое .... хочу понять как сделать. люди (если такие есть), помогите. попытался через char переслать код RGB, и ничего не получилось. такое вообще возможно ли? устал маяться.

Код:
#include "stdafx.h"
#include <windows.h>
#include <string.h>
#include <conio.h>
#include <string.h>

#define ID_EDIT 1
#define ID_BUTTON 2
#define TXT_COLOR1 RGB(255,0,0)
#define TXT_COLOR2 RGB(0,255,0)
#define TXT_COLOR3 RGB(255,0,0)
 
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 
  static HWND hwndEdit1;            // инициализация 
  static HWND hwndEdit2;
  static HWND hwndButton1;
  static HWND hwndButton2;
  static HWND hwndButton3;
  static HWND hwndButton4;
  static HWND hwndButton5;
  static len;
  static TCHAR text[60];
  static TCHAR str[60];
  char rcl[]="RGB(255,0,0)";

 
 
    switch(msg)
        {
            case WM_CREATE:
                hwndEdit1 = CreateWindow(TEXT("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,         // создание двух полей edit
                30, 50, 440, 30, hwnd, (HMENU) 1,
                NULL, NULL);
 
 
                hwndEdit2 = CreateWindow(TEXT("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,
                30, 100, 440, 50, hwnd, (HMENU) 2,
                NULL, NULL);
 
 
 
                hwndButton1 = CreateWindow(                 // создание кнопок
                TEXT("button"), TEXT("Title"),       
                WS_VISIBLE | WS_CHILD,  
                30, 170, 80, 25,        
                hwnd, (HMENU) 3, NULL, NULL);      
 
                hwndButton2 = CreateWindow(
                TEXT("button"), TEXT("Yelow"),       
                WS_VISIBLE | WS_CHILD,  
                120, 170, 80, 25,        
                hwnd, (HMENU) 4, NULL, NULL); 
 
                hwndButton3 = CreateWindow(
                TEXT("button"), TEXT("Red"),       
                WS_VISIBLE | WS_CHILD,  
                210, 170, 80, 25,        
                hwnd, (HMENU) 5, NULL, NULL); 
 
                hwndButton4 = CreateWindow(
                TEXT("button"), TEXT("Font"),       
                WS_VISIBLE | WS_CHILD,  
                300, 170, 80, 25,        
                hwnd, (HMENU) 6, NULL, NULL); 
 
                hwndButton5 = CreateWindow(
                TEXT("button"), TEXT("Quit"),       
                WS_VISIBLE | WS_CHILD,  
                390, 170, 80, 25,        
                hwnd, (HMENU) 7, NULL, NULL); 
 
            break;
 
    case WM_COMMAND:
		
                if (LOWORD(wParam) == 3) {
                len = GetWindowTextLength(hwndEdit1) + 1;
                GetWindowText(hwndEdit1, text, len);
                SetWindowText(hwnd, text);                  // изменение заголовка
                }

	            if (LOWORD(wParam) == 4) {
                len = GetWindowTextLength(hwndEdit1) + 1;
                GetWindowText(hwndEdit1, str, len);
				char rlc[]="TXT_COLOR1";
				SetWindowText(hwndEdit2, str);
                }
 
                else if (LOWORD(wParam) == 5) {
                len = GetWindowTextLength(hwndEdit1) + 1;
                GetWindowText(hwndEdit1, text, len);
                SetWindowText(hwndEdit2, text);
                }
 
                else if (LOWORD(wParam) == 6) {
                len = GetWindowTextLength(hwndEdit1) + 1;
                GetWindowText(hwndEdit1, text, len);
				SetWindowText(hwndEdit2, text);
				}
 
                case WM_CTLCOLOREDIT:
				if(hwndEdit2 == (HWND)lParam) // меняем цвета для конкретного эдита
				{
				HDC hdcEdit2 = (HDC) wParam;
				::SetTextColor(hdcEdit2, *rcl);    //0 255 0 - зелёный..  255 0 0 
				return 0;
				}

	 else if (LOWORD(wParam) == 7) {
                PostQuitMessage(0);
                }

	 

 
    break;
 
        case WM_DESTROY:
            PostQuitMessage(0);
        break;
        }
return DefWindowProc(hwnd, msg, wParam, lParam);
}
            int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
            LPSTR lpCmdLine, int nCmdShow )
{
  MSG  msg ;    
  WNDCLASS wc = {0};
  wc.lpszClassName = TEXT( "Task" );
  wc.hInstance     = hInstance ;
  wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
  wc.lpfnWndProc   = WndProc ;
  wc.hCursor       = LoadCursor(0,IDC_ARROW);
 
 
  RegisterClass(&wc);
  CreateWindow( wc.lpszClassName, TEXT("Task"),
                WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                220, 220, 510, 310, 0, 0, hInstance, 0);  
 
  while( GetMessage(&msg, NULL, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
  return (int) msg.wParam;
}
Добавлено через 16 минут

Код:
#include "stdafx.h"
#include <windows.h>
#include <string.h>
#include <conio.h>
#include <string.h>

#define ID_EDIT 1
#define ID_BUTTON 2

 
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 
  static HWND hwndEdit1;            // инициализация 
  static HWND hwndEdit2;
  static HWND hwndButton1;
  static HWND hwndButton2;
  static HWND hwndButton3;
  static HWND hwndButton4;
  static HWND hwndButton5;
  static len;
  static TCHAR text[60];
  static TCHAR str[60];
  static R=0;
  static G=0;
  static B=0;

 
    switch(msg)
        {
            case WM_CREATE:
                hwndEdit1 = CreateWindow(TEXT("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,         // создание двух полей edit
                30, 50, 440, 30, hwnd, (HMENU) 1,
                NULL, NULL);
 
                hwndEdit2 = CreateWindow(TEXT("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,
                30, 100, 440, 50, hwnd, (HMENU) 2,
                NULL, NULL);
 
                hwndButton1 = CreateWindow(                 // создание кнопок
                TEXT("button"), TEXT("Title"),       
                WS_VISIBLE | WS_CHILD,  
                30, 170, 80, 25,        
                hwnd, (HMENU) 3, NULL, NULL);      
 
                hwndButton2 = CreateWindow(
                TEXT("button"), TEXT("Yelow"),       
                WS_VISIBLE | WS_CHILD,  
                120, 170, 80, 25,        
                hwnd, (HMENU) 4, NULL, NULL); 
 
                hwndButton3 = CreateWindow(
                TEXT("button"), TEXT("Red"),       
                WS_VISIBLE | WS_CHILD,  
                210, 170, 80, 25,        
                hwnd, (HMENU) 5, NULL, NULL); 
 
                hwndButton4 = CreateWindow(
                TEXT("button"), TEXT("Font"),       
                WS_VISIBLE | WS_CHILD,  
                300, 170, 80, 25,        
                hwnd, (HMENU) 6, NULL, NULL); 
 
                hwndButton5 = CreateWindow(
                TEXT("button"), TEXT("Quit"),       
                WS_VISIBLE | WS_CHILD,  
                390, 170, 80, 25,        
                hwnd, (HMENU) 7, NULL, NULL); 
 
				break;
 
    case WM_COMMAND:
		
                if (LOWORD(wParam) == 3) {
                len = GetWindowTextLength(hwndEdit1) + 1;
                GetWindowText(hwndEdit1, text, len);
                SetWindowText(hwnd, text);                  // изменение заголовка
                }

	            if (LOWORD(wParam) == 4) {
                len = GetWindowTextLength(hwndEdit1) + 1;
                GetWindowText(hwndEdit1, str, len);
				SetWindowText(hwndEdit2, str);
				R=255;
				G=0;
				B=0;
                }
 
                else if (LOWORD(wParam) == 5) {
				R=0;
				G=255;
				B=0;
                len = GetWindowTextLength(hwndEdit1) + 1;
                GetWindowText(hwndEdit1, text, len);
                SetWindowText(hwndEdit2, text);
                }
 
                else if (LOWORD(wParam) == 6) {
                len = GetWindowTextLength(hwndEdit1) + 1;
                GetWindowText(hwndEdit1, text, len);
				SetWindowText(hwndEdit2, text);
				}
 
                case WM_CTLCOLOREDIT:
				if(hwndEdit2 == (HWND)lParam) // меняем цвета для конкретного эдита
				{
				HDC hdcEdit2 = (HDC) wParam;
				::SetTextColor(hdcEdit2, RGB(R,G,B));    //0 255 0 - зелёный..  255 0 0 
				return 0;
				}

		else if (LOWORD(wParam) == 7) {
                PostQuitMessage(0);
                }

	 

 
		break;
 
        case WM_DESTROY:
				PostQuitMessage(0);
        break;
        }
return DefWindowProc(hwnd, msg, wParam, lParam);
		}
            int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
            LPSTR lpCmdLine, int nCmdShow )
			{
	MSG  msg ;    
	WNDCLASS wc = {0};
	wc.lpszClassName = TEXT( "Task" );
	wc.hInstance     = hInstance ;
	wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
	wc.lpfnWndProc   = WndProc ;
	wc.hCursor       = LoadCursor(0,IDC_ARROW);
 
 
	RegisterClass(&wc);
	CreateWindow( wc.lpszClassName, TEXT("Task"),
                WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                220, 220, 510, 310, 0, 0, hInstance, 0);  
 
	while( GetMessage(&msg, NULL, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
	}
	return (int) msg.wParam;
	}
через жопу сделано, но работает. и никто не мог такого написать? великие прогеры)))))
zzz678 вне форума  
Ответить с цитированием
Непрочитано 31.07.2011, 17:49   [включить плавающее окно]   #2
FeyFre
Мужской Опытный
 
Аватар для FeyFre
 
Регистрация: 05.03.2010
Адрес: Vinnitsa, UA
что у Вас case WM_CTLCOLOREDIT: делает по среди обработки case WM_COMMAND: ? Я вижу что case WM_CTLCOLOREDIT: с телом тупо вставлено в середину case WM_COMMAND: какраз после закрытия очередного else-if и началом очередного else так что Вам повезло что оно компилируется вообще.
(Оформи Вы нормально switch-case - Вам бы сразу же компилятор выдал бы что Вы сделали что-то не то. Да и магические числа 3, 7 и пр. Вам шлют привет, ибо если бы вместо них вставили бы именованные константы - сразу же увидели бы свои глюки)
кстати, нужно проверять что возвращает CreateWindow всегда.
FeyFre вне форума  
Конфигурация ПК
Ответить с цитированием
Ответ Создать новую тему

Метки
c++, программирование

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 08:27. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 2000-2017 3DNews. All Rights Reserved.
Администрация 3DNews требует соблюдения на форуме правил и законов РФ
Серверы размещены в Hostkey