Dlaczego ten program który według mnie jest dobrze napisany ciągle mi się do minuty prawidłowego działania zawiesza.
// rysowanie w oknie win32.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
//#include <windows.h>
LRESULT CALLBACK WndProc_okno1(HWND,UINT,WPARAM,LPARAM);
int fun_okno1(HWND hwnd[1],WNDCLASSEX wc[1],HINSTANCE hInst);
void rysowanie_txt(HWND hwnd);
void fun_przygot_czcionki(HWND hwnd,HDC kontekst[1],HFONT nowa_czcionka[1],HFONT stara_czcionka[1],COLORREF rgb1[1],COLORREF rgb2[1],int wys_czcionki1);
const WORD ID_TIMER = 1;
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpsCmdLine, int nShowCmd)
{
//////////
WNDCLASSEX wc;
HWND Okno;
fun_okno1(&Okno,&wc,hInst);
HDC kontekst=GetDC(Okno); //Pobranie kontekstu
//////////
MSG msgs;
MoveWindow(Okno, 100, 300, 500,250, false);
ShowWindow(Okno,nShowCmd);
UpdateWindow(Okno);
Sleep(1000);
/////////////////// start programu ///////////////////////////////////////
while(TRUE)
{
//MessageBox(0,_T("1111111"),_T("111111111"),MB_ICONSTOP);
if(PeekMessage(&msgs,NULL,0,0,PM_REMOVE))
{
// test if this is a quit
if(msgs.message == WM_QUIT) break;
TranslateMessage( &msgs);
DispatchMessage( &msgs);
}
//MessageBox(0,_T("22222222"),_T("22222222222"),MB_ICONSTOP);
//////////
rysowanie_txt(Okno);
//////////
//pisanie txt po obszarze roboczym okna
HFONT hFont;//nowa czcionka
HFONT font;//stara czcionka
COLORREF Txtcolor=RGB(133,192,252);
COLORREF Bkcolor=RGB(160,61,158);
int wys_czcionki=30;
///////////////
fun_przygot_czcionki(Okno,&kontekst,&hFont,&font,&Txtcolor,&Bkcolor,wys_czcionki);//przygotowanie czcionki
///////////////
Sleep(10);
}
ReleaseDC(Okno,kontekst);
DeleteDC(kontekst);
/////////////////// koniec programu ///////////////////////////////////////
return msgs.wParam;
}
///////////////////////////////////////////////////
///////////////////////////////////////////////////
LRESULT CALLBACK WndProc_okno1(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
HDC hdcBitmapy, hdc;//zmienne na 2 konteksty
PAINTSTRUCT ps;
switch( msg )
{
case WM_CREATE:
break;
case WM_COMMAND:
break;
case WM_DESTROY:
PostQuitMessage( 0 );
break;
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_PAINT:
{
hdc = BeginPaint( hWnd, &ps );
EndPaint(hWnd,&ps);
break;
}
case WM_TIMER:
break;
default:
return DefWindowProc( hWnd, msg, wParam, lParam );
}
return 0;
}// koniec obslugi komunikatow dla okna 1 : LRESULT CALLBACK WndProc
///////////////////////////////////////////////////
///////////////////////////////////////////////////
void rysowanie_txt(HWND hwnd)
{
//Sleep(100);
//HWND he1=GetDesktopWindow();//GetTopWindow or GetForegroundWindow GetActiveWindow
HWND he1=GetForegroundWindow();
//HWND he1=GetActiveWindow();
HDC hdcPulpitu = GetDC(he1);
HDC kontekst = GetDC(hwnd); //Pobranie kontekstu
jeszczeraz01:
if(!kontekst)
{
MessageBox(0,_T("!kontekst"),_T("!kontekst"),MB_ICONSTOP);
goto jeszczeraz01;
}
jeszczeraz0:
if(!hdcPulpitu)
{
MessageBox(0,_T("!hdcPulpitu"),_T("!hdcPulpitu"),MB_ICONSTOP);
goto jeszczeraz0;
}
int szer_bmp,wys_bmp,od_szer,od_wys;
//TextOut(kontekst,200,200,_T("Witaj!"),6);
/*
szer_bmp=72;wys_bmp=11;
od_szer=409;od_wys=43;
jeszczeraz1:
if(!BitBlt(kontekst,20,0,szer_bmp,wys_bmp,hdcPulpitu,od_szer,od_wys,SRCCOPY))///
{ ///
MessageBox(0,_T("!BitBlt"),_T("!BitBlt"),MB_ICONSTOP); ///
goto jeszczeraz1; ///
}
*/
szer_bmp=92;wys_bmp=11;
od_szer=389-10;od_wys=43-30;
jeszczeraz1:
if(!StretchBlt(kontekst,20,10,szer_bmp*3,wys_bmp*3,hdcPulpitu,od_szer,od_wys,szer_bmp,wys_bmp,SRCCOPY))///
{ ///
MessageBox(0,_T("!StretchBlt"),_T("!StretchBlt"),MB_ICONSTOP); ///
goto jeszczeraz1; ///
}
szer_bmp=65;wys_bmp=60;
od_szer=215-10;od_wys=199-30;
jeszczeraz2:
if(!StretchBlt(kontekst,20,45,szer_bmp*2,wys_bmp*2,hdcPulpitu,od_szer,od_wys,szer_bmp,wys_bmp,SRCCOPY))///
{ ///
MessageBox(0,_T("!StretchBlt"),_T("!StretchBlt"),MB_ICONSTOP); ///
goto jeszczeraz2; ///
}
szer_bmp=155;wys_bmp=20;
od_szer=166-10;od_wys=144-30;
jeszczeraz3:
if(!StretchBlt(kontekst,150,45,szer_bmp*2,wys_bmp*2,hdcPulpitu,od_szer,od_wys,szer_bmp,wys_bmp,SRCCOPY))///
{ ///
MessageBox(0,_T("!StretchBlt"),_T("!StretchBlt"),MB_ICONSTOP); ///
goto jeszczeraz3; ///
}
szer_bmp=50;wys_bmp=50;
od_szer=332-10;od_wys=306-30;
jeszczeraz4:
if(!StretchBlt(kontekst,150,85,szer_bmp*2,wys_bmp*2,hdcPulpitu,od_szer,od_wys,szer_bmp,wys_bmp,SRCCOPY))///
{ ///
MessageBox(0,_T("!StretchBlt"),_T("!StretchBlt"),MB_ICONSTOP); ///
goto jeszczeraz4; ///
}
ReleaseDC(hwnd,kontekst);
DeleteDC(kontekst);
ReleaseDC(he1,hdcPulpitu);
DeleteDC(hdcPulpitu);
}// koniec void rysowanie_txt
///////////////////////////////////////////////////
///////////////////////////////////////////////////
int fun_okno1(HWND hwnd[1],WNDCLASSEX wc[1],HINSTANCE hInst)
{
wc->hInstance=hInst;
(*wc).lpszClassName=_T("Klasa okna");
wc[0].lpfnWndProc=WndProc_okno1;
wc[0].style=CS_DBLCLKS;
wc[0].cbSize=sizeof(WNDCLASSEX);
wc[0].hIcon=LoadIcon(0,IDI_APPLICATION);
wc[0].hIconSm=LoadIcon(0,IDI_APPLICATION);
wc[0].hCursor=LoadCursor(0,IDC_ARROW);
wc[0].lpszMenuName=0;
wc[0].hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc[0].cbWndExtra=0;
wc[0].cbClsExtra=0;
if(RegisterClassEx(&wc[0])==0) return 0;
hwnd[0]=CreateWindowEx(0,_T("Klasa okna"),_T("Tytuł okna"),WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_SIZEBOX|WS_VSCROLL,400,400,900,900,0,0,hInst,0);
//WS_HSCROLL Okno posiada poziomy pasek przewijania.
//WS_SIZEBOX Okno posiada możliwość zmiany rozmiaru. To samo, co WS_THICKFRAME.
//WS_VSCROLL Okno posiada pionowy pasek przewijania.
}// koniec int fun_okno1
///////////////////////////////////////////////////
///////////////////////////////////////////////////
void fun_przygot_czcionki(HWND hwnd,HDC kontekst[1],HFONT nowa_czcionka[1],HFONT stara_czcionka[1],COLORREF rgb1[1],COLORREF rgb2[1],int wys_czcionki1)
{
/*
HFONT CreateFont
int nHeight, // logiczna wysokość czcionki
int nWidth, // logiczna średnia szerokość znaku
int nEscapement, // kąt "ucieczki" wiersza tekstu (??)
int nOrientation, // kąt nachylenia linii bazowej
int fnWeight, // stopień wytłuszczenia czcionki
DWORD fdwItalic, // flaga pochylenia czcionki (kursywy)
DWORD fdwUnderline, // flaga podkreślenia czcionki
DWORD fdwStrikeOut, // flaga przekreślenia czcionki
DWORD fdwCharSet, // identyfikator systemu kodowania znaków
DWORD fdwOutputPrecision, // dokładność na wyjściu
DWORD fdwClipPrecision, // dokładność przycinania
DWORD fdwQuality, // jakość na wyjściu
DWORD fdwPitchAndFamily, // skok i rodzina czcionki//kształt liter przypomina pismo odręczne (FF_SCRIPT),
LPCTSTR lpszFace // wskaźnik do nazwy kroju czcionki
*/
TEXTMETRIC tm;//informacje o fizycznych właściwościach czcionki.
LOGFONT logFont2;//zapisane informacje czcionki//structure defines the attributes of a font.
memset(&logFont2, 0, sizeof(logFont2));
nowa_czcionka[0]=CreateFont(48,0,0,0,FW_BOLD,0,0,0,DEFAULT_CHARSET,0,0,ANTIALIASED_QUALITY, VARIABLE_PITCH, TEXT("txt"));
stara_czcionka[0]=(HFONT)SelectObject(kontekst[0],nowa_czcionka[0]);//zmiana czcionki na nowa_czcionka,zapisanie starej czcionki do font
GetTextMetrics(kontekst[0],&tm);//pobieranie właściwości czcionki z SelectObject() do struktury &tm //Font Dimensions
GetObject(nowa_czcionka[0],sizeof(logFont2), &logFont2);//pobranie informacji o czcionce do struktury LOGFONT
logFont2.lfHeight = wys_czcionki1;//modyfikacja istniejącej czcionki //logFont2.lfHeight=-MulDiv(piksele, GetDeviceCaps(kontekst, LOGPIXELSY), 72);
nowa_czcionka[0]=CreateFontIndirect(&logFont2);
SelectObject(kontekst[0], nowa_czcionka[0]);//aktualizacja zmienionej czcionki
SetTextColor(kontekst[0],rgb1[0]);
SetBkColor(kontekst[0],rgb2[0]);
//SetBkMode(kontekst,TRANSPARENT); // przezroczyste tlo dla textout
SetTextAlign(kontekst[0],TA_LEFT|TA_TOP);
//dopasuj okno do tekstu/////
//SetWindowPos(hwnd, 0, 0, 0, rc.right, rc.bottom, SWP_NOZORDER | SWP_NOMOVE);
//a wszystko poza tekstem ma być przezroczyste
//SetLayeredWindowAttributes(hwnd, RGB(1,2,3), 0, LWA_COLORKEY);
/*
//////////////////////////////////////////////
//SPOSÓB nr 1:
wchar_t temp33[14];
int x = 3;
wsprintfW(temp33,_T("S.t.ring %d"),tm.tmHeight);
//wsprintfW(temp33,_T("S.t.ring %d"),logFont2.lfHeight);
tm.tmHeight=111;
TextOut(kontekst,95,95,temp33,wcslen(temp33));
//////////////////////////////////////////////
*/
}// koniec fun_przygot_do_rys_txt
///////////////////////////////////////////////////