Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2010, 23:47   #1
delias
Пользователь
 
Регистрация: 31.10.2009
Сообщений: 27
По умолчанию Перерисовать окно InvalidateRect где указывать

Помогите, не могу понять где нужно указать InvalidateRect(wnd,0,NULL); чтобы перерисовать окно?
Дело в том, что нарисовав элемент - если окно отодвинуть за границу экрана а потом обратно - то то что было нарисовано - стирается. Поэтому нужно окно перерисовывать. Но вот что-то не получается.

Код:
#include <windows.h>

char className[] = "WindowClass1";
MSG msg;
HWND hbutton;
HINSTANCE hInst;
LRESULT CALLBACK WndProc(HWND wnd, UINT msg, WPARAM wParam, LPARAM lParam){
    switch(msg){

	case WM_CREATE: {

        return 0;
    }

	case WM_MOUSEMOVE:
		{

			return 0;
		}

	case WM_RBUTTONDOWN:
		{
			return 0;
		}

	case WM_LBUTTONDOWN:
		{
		
			HDC dc;
			dc = GetDC(wnd);

			Rectangle(dc, 100,100,200,300);
			
			return 0;
		}

		case WM_PAINT:
		{
			
			PAINTSTRUCT ps;
			HDC dc = BeginPaint(wnd,&ps);
			return 0;
		}

	case WM_COMMAND:{
        
		return 0;
	}

    case WM_DESTROY: {PostQuitMessage(0); return 0;}
    }
    return DefWindowProc(wnd,msg,wParam,lParam);
}

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
 	// TODO: Place code here.
    WNDCLASS wc;
    HWND hwnd;

	hInst = hInstance;

    wc.hInstance = hInstance;
    wc.hIcon=LoadIcon(NULL,IDI_QUESTION);
    wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc.lpfnWndProc = WndProc;
    wc.lpszMenuName=NULL;
    wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
    wc.lpszClassName = className;
    wc.cbClsExtra=wc.cbWndExtra=wc.style=0;

    int k = RegisterClass(&wc);

	hwnd = CreateWindow(className, "Hellooooo!", WS_VISIBLE|WS_OVERLAPPEDWINDOW/*|WS_CAPTION|WS_SYSMENU|WS_MAXIMIZEBOX|WS_THICKFRAME*/,
        300, 300, 600, 400, NULL, NULL, hInstance, 0);

    if(!hwnd) return false;
    
    while(GetMessage(&msg,0,0,0)){
		TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
	
	return 1;
}
delias вне форума Ответить с цитированием
Старый 25.03.2010, 00:49   #2
noxin
Пользователь
 
Регистрация: 24.03.2010
Сообщений: 38
По умолчанию

static bool fl;
..................................
case WM_LBUTTONDOWN:
{

HDC dc;
dc = GetDC(hWnd);

Rectangle(dc, 100,100,200,300);
fl = true;
ReleaseDC(hWnd,dc);
}break;

case WM_PAINT:
{


hdc = BeginPaint(hWnd,&ps);
if (fl)
Rectangle(hdc, 100,100,200,300);
BeginPaint(hWnd,&ps);

}break;
................................... ....

можно так
Если чем помог, оставьте отзыв...
noxin вне форума Ответить с цитированием
Старый 25.03.2010, 01:15   #3
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Ага, только тогда уж лучше так:

Код:
case WM_LBUTTONDOWN:
		{
			flagR=1;
			InvalidateRect(wnd, 0, 0);
			return 0;
		}

case WM_PAINT:
		{
			
			PAINTSTRUCT ps;
			HDC dc = BeginPaint(wnd,&ps);
			if(flagR==1)Rectangle(dc, 100,100,200,300);
			EndPaint(wnd,&ps);
			return 0;
		}
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как элементы массива argv могли бы указывать записи командной строки? Serjuk Помощь студентам 7 22.01.2010 10:50
Вызов ShellExecute из модуля. Какой тогда дескриптор окна указывать? Вавел из ГМТУ Общие вопросы Delphi 12 27.08.2009 14:44
Как принудительно перерисовать форму. IliaIT Общие вопросы Delphi 2 23.04.2009 14:34
lokalhost- какой указывать адрес ? lamer_lam Общие вопросы Web 16 04.03.2009 16:18