|
Mostrar Temas
|
Páginas: [1]
|
1
|
Programación / Programación C/C++ / Borra textos
|
en: 27 Julio 2016, 12:46 pm
|
Hola que tal: Estoy intentando crear ventanas hijas que escriban textos en otras ventanas con una clase, el problema que tengo es que cuando termina de escribir todas las ventanas refresco la ventana madre y entonces se borran todos los textos de las ventanas quedando estas. Estoy haciendo todo tipo de pruebas trabajo con Code:Blocks y haciendo el debug cuando paro entre impresiones si me las pone pero luego cuando finaliza la función y refresca la ventana donde van desaparecen y quedan las ventanas sin textos. La función que solicita las ventanas y la clase que las crea son : Funcion void Pantalla() { TSay oSay = TSay(); oPan4 = oSay.Crear(hInstance, 10*TamPan, 30*TamPan, wtex000, oDlgwVen, oFont, escri1, fondo2,1020*TamPan, 77*TamPan, 0, 0, "oPan4"); oPan401 = oSay.Crear(hInstance, 25*TamPan,340*TamPan, wtex001, oPan4 , oFon3, escri3, fondo1, 630*TamPan, 30*TamPan, 1, 1, "oPan401"); oMenPan = oSay.Crear(hInstance, 95*TamPan, 30*TamPan, wtex000, oDlgwVen, oFont, escri3, fondo1, 245*TamPan,555*TamPan, 0, 0, "oMenPan"); oMenPan01 = oSay.Crear(hInstance, 22*TamPan, 30*TamPan, wtex002, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan01"); oMenPan02 = oSay.Crear(hInstance, 52*TamPan, 30*TamPan, wtex003, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan02"); oMenPan03 = oSay.Crear(hInstance, 82*TamPan, 30*TamPan, wtex004, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan03"); oMenPan04 = oSay.Crear(hInstance, 112*TamPan, 30*TamPan, wtex008, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan04"); oMenPan05 = oSay.Crear(hInstance, 142*TamPan, 30*TamPan, wtex009, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan05"); oMenPan06 = oSay.Crear(hInstance, 172*TamPan, 30*TamPan, wtex010, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan06"); oMenPan07 = oSay.Crear(hInstance, 202*TamPan, 30*TamPan, wtex011, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan07"); oMenPan08 = oSay.Crear(hInstance, 232*TamPan, 30*TamPan, wtex012, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan08"); oMenPan09 = oSay.Crear(hInstance, 262*TamPan, 30*TamPan, wtex013, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan09"); oPant = oSay.Crear(hInstance, 95*TamPan,300*TamPan, wtex001, oDlgwVen, oFont, escri1, fondo2, 750*TamPan,555*TamPan, 1, 0, "oPant"); oPan2 = oSay.Crear(hInstance, 117*TamPan, 30*TamPan, wtex001, oDlgwVen, oFont, escri1, fondo2, 280*TamPan, 25*TamPan, 0, 0, "oPan2"); } Clase #if !defined(TSAY) #define TSAY #include <windows.h> WNDCLASS wc; HWND vHij; const char* pint; HFONT letr; COLORREF escr; double x_tamX; double x_tamY; int alin; class TSay { protected: static LRESULT CALLBACK WinProc(HWND vHij, UINT msg, WPARAM wParam, LPARAM lParam) { HDC dc; PAINTSTRUCT ps; RECT rc; int text; HGDIOBJ old; switch(msg) { case WM_PAINT: dc = GetDC(vHij); dc = BeginPaint (vHij, &ps); SetRect (&rc, 2, 3, x_tamX-4, x_tamY-6); SetBkMode (dc, escr); SetTextColor (dc, escr); old = SelectObject(dc, letr); switch (alin) { case 0: text = DrawTextA(dc, pint, -1, &rc, WS_BORDER | DT_LEFT | DT_VCENTER); break; case 1: text = DrawTextA(dc, pint, -1, &rc, WS_BORDER | DT_CENTER | DT_VCENTER); break; case 2: text = DrawTextA(dc, pint, -1, &rc, WS_BORDER | DT_RIGHT | DT_VCENTER); break; } SelectObject(dc, old); ReleaseDC(vHij, dc); DeleteObject(old); EndPaint (vHij, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(vHij, msg, wParam, lParam); } return 0; } public: TSay() { } ~TSay() { } HWND Crear(HINSTANCE hIns,double posX, double posY, const char *pint, HWND vent, HFONT letr, COLORREF escr, COLORREF fond, double tamX, double tamY, int bord, int alin, const char *cVen) { WNDCLASSEX WndClass; WndClass.cbSize = sizeof(WNDCLASSEX); WndClass.style = 0; WndClass.lpfnWndProc = WinProc; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hInstance = hIns; WndClass.hIcon = NULL; WndClass.hIconSm = NULL; WndClass.hCursor = LoadCursor(0, IDC_ARROW); WndClass.hbrBackground = (HBRUSH)CreateSolidBrush(fond); WndClass.lpszMenuName = 0; WndClass.lpszClassName = cVen; RegisterClassEx(&WndClass); DWORD hPen; if (bord == 1) hPen = WS_BORDER | WS_CHILD| WS_VISIBLE; else hPen = WS_CHILD| WS_VISIBLE; int x_posX = (int)posX; int x_posY = (int)posY; int x_tamX = (int)tamX; int x_tamY = (int)tamY; vHij = CreateWindow( cVen, "TSay", hPen, x_posY, x_posX, x_tamX, x_tamY, vent, NULL, hIns, NULL); return vHij; } }; #endif // TSAY
Alguna ayuda por favor. Os dejo las imágenes de cuando estoy haciendo el debug : y cuando termina la función y refresca la pantalla: Un saludo y gracias. Carlos
|
|
|
2
|
Programación / Programación C/C++ / invalid use of member ' ' in static member function
|
en: 9 Junio 2016, 10:56 am
|
Hola a todos: En primer lugar soy muy novato con C++ y estoy haciendo una clase para crear ventanas hijas y en ellas escribir textos, la clase es la siguiente: #include <windows.h> #include <string> using namespace std; #if !defined(ClaseTSay) #define ClaseTSay #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class TSay { private: static LRESULT CALLBACK WinProc(HWND vHij, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_PAINT : { HDC dc = GetDC(vHij); PAINTSTRUCT ps; RECT rc; HRGN bgRgn; HBRUSH hBrush; HGDIOBJ old; int x_posX = (int)posX; int x_posY = (int)posY; int x_tamX = (int)tamX; int x_tamY = (int)tamY; dc = BeginPaint (vHij, &ps); SetRect (&rc, 0, 0, x_tamX, x_tamY); bgRgn = CreateRectRgnIndirect(&rc); hBrush = CreateSolidBrush(fond); FrameRgn(dc, bgRgn, hBrush,2,2); SetBkMode (dc, fond); SetTextColor (dc, escr); old = SelectObject(dc, letr); switch (m_alin) { case 0: DrawText(dc, pint, lstrlen(pint), &rc, DT_LEFT | DT_VCENTER ); break; case 1: DrawText(dc, pint, lstrlen(pint), &rc, DT_CENTER | DT_VCENTER ); break; case 2: DrawText(dc, pint, lstrlen(pint), &rc, DT_RIGHT | DT_VCENTER ); break; } SelectObject(dc, old); ReleaseDC(vHij, dc); DeleteObject(old); DeleteObject(bgRgn); DeleteObject(hBrush); EndPaint (vHij, &ps); break; } default : return DefWindowProc(vHij, uMsg, wParam, lParam); } return 0; } protected: HWND vHij; WNDPROC oldW; double posX; double posY; const char* pint; HWND vent; HFONT letr; COLORREF escr; COLORREF fond; double tamX; double tamY; int bord; int alin; const TCHAR *cVen; public: TSay() { vHij = NULL; oldW = NULL; posX = 0; posY = 0; pint = NULL; vent = NULL; letr = NULL; escr = 00; fond = 0; tamX = 0; tamY = 0; bord = 0; alin = 0; cVen = NULL; } ~TSay() { } HWND Crear( double posX, double posY, const char* pint, HWND vent, HFONT letr, COLORREF escr, COLORREF fond, double tamX, double tamY, int bord, int alin, const TCHAR *cVen) { DWORD hPen; if (bord == 1) { hPen = WS_BORDER | WS_CHILD| WS_VISIBLE; } else { hPen = WS_CHILD| WS_VISIBLE; } WNDCLASSEX WndClass; WndClass.cbSize = sizeof(WNDCLASSEX); WndClass.style = 0; WndClass.lpfnWndProc = WinProc; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hInstance = GetModuleHandle(NULL); WndClass.hIcon = NULL; WndClass.hIconSm = NULL; WndClass.hCursor = LoadCursor(0, IDC_ARROW); WndClass.hbrBackground = (HBRUSH)CreateSolidBrush(fond); WndClass.lpszMenuName = 0; WndClass.lpszClassName = cVen; RegisterClassEx(&WndClass); int x_posX = (int)posX; int x_posY = (int)posY; int x_tamX = (int)tamX; int x_tamY = (int)tamY; vHij = CreateWindowEx( 0, cVen, "TSay", hPen, x_posY, x_posX, x_tamX, x_tamY, vent, NULL, GetModuleHandle(NULL), NULL); if(vHij) { ShowWindow(vHij, 5); UpdateWindow(vHij); } return vHij; } }; #endif // !defined(ClaseTSay)
: Mi problema es que en las líneas 73, 74, 75, 77, 78, 79, 80 y 81 me da el error de "invalid use of member ' ' in static member function" y en las líneas entre la 29 y la 52 que las usan en WM_PAINT me pone "from this location". Me podéis orientar para poder solucionar este problema. Un saludo y gracias. Carlos
|
|
|
3
|
Programación / Programación C/C++ / Salida al Sistema Siin notificar error.
|
en: 25 Mayo 2016, 08:52 am
|
Hola que tal: Estoy haciendo la siguiente aplicación: - Una Ventana Principal con un Menú. - Dentro de ella dos ventanas que muestran textos que pueden cambiar de color de fondo y de escritura. Estos últimos son ventanas que quiero crear he adaptado una clase que he visto por internet a mis especificaciones pero cuando termina sale: Pero no me da ninguna información más. La clase es : #include <windows.h> #include <string>
using namespace std;
class CWinThunk { protected: virtual LRESULT CALLBACK WindowProc(UINT, WPARAM, LPARAM)=0; DWORD InitThunk(void* pThis){ // MOV [ESP+4], pThis *(DWORD*)(_thunk + 0) = 0x042444C7; *(DWORD*)(_thunk + 4) = (DWORD)pThis; // JMP proc //salta a WindowProc *(BYTE*) (_thunk + 8) = 0xe9; *(DWORD*)(_thunk + 9) = **(DWORD**)this - ((int)_thunk + 13); return (DWORD) _thunk; } private: char _thunk[13]; };
class TSay: public CWinThunk { protected: HWND m_hWnd; WNDPROC m_lpOldProc; LRESULT CALLBACK WindowProc(UINT, WPARAM, LPARAM); LRESULT DefWindowProc(UINT, WPARAM, LPARAM); public: TSay(HINSTANCE,double, double, const char*, HWND, HFONT, COLORREF, COLORREF, double, double, int, int, HWND); ~TSay(); private: HINSTANCE m_hIns; double m_posX; double m_posY; const char* m_pint; HWND m_vent; HFONT m_letr; COLORREF m_escr; COLORREF m_fond; double m_tamX; double m_tamY; int m_bord; int m_alin; HWND m_vHij; void _Conectar(HWND); static TSay *pCreando; static LRESULT CALLBACK PrimerMensaje(HWND, UINT, WPARAM, LPARAM); };
static const char* ClaseVentana = "ClaseTSay";
TSay::TSay(HINSTANCE hIns,double posX, double posY, const char* pint, HWND vent, HFONT letr, COLORREF escr, COLORREF fond, double tamX, double tamY, int bord, int alin, HWND vHij) { m_hIns = hIns; m_posX = posX; m_posY = posY; m_pint = pint; m_vent = vent; m_letr = letr; m_escr = escr; m_fond = fond; m_tamX = tamX; m_tamY = tamY; m_bord = bord; m_alin = alin; m_vHij = vHij; m_lpOldProc = NULL; m_hWnd = NULL;
WNDCLASS wc; ATOM a;
ZeroMemory(&wc, sizeof(WNDCLASS));
wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)TSay::PrimerMensaje; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = m_hIns; wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)CreateSolidBrush(m_fond); wc.lpszClassName = ClaseVentana;
a = RegisterClass(&wc);
pCreando = this;
int x_posX = (int)m_posX; int x_posY = (int)m_posY; int x_tamX = (int)m_tamX; int x_tamY = (int)m_tamY;
DWORD m_hPen; if (m_bord == 1) { m_hPen = SS_LEFT | WS_BORDER | WS_CHILD| WS_VISIBLE; } else { m_hPen = SS_LEFT | WS_CHILD| WS_VISIBLE; }
m_vHij = CreateWindow( ClaseVentana, "TSay", m_hPen, x_posY, x_posX, x_tamX, x_tamY, m_vent, NULL, m_hIns, NULL);
if(m_vHij) { ShowWindow(m_vHij, 5); UpdateWindow(m_vHij); } }
TSay::~TSay() { }
LRESULT CALLBACK TSay::WindowProc(UINT msg, WPARAM wp, LPARAM lp) { HDC dc = GetDC(m_vHij); PAINTSTRUCT ps; RECT rc; HRGN bgRgn; HBRUSH hBrush; HPEN hPen; HGDIOBJ old;
int x_posX = (int)m_posX; int x_posY = (int)m_posY; int x_tamX = (int)m_tamX; int x_tamY = (int)m_tamY;
switch(msg) { case WM_PAINT: dc = BeginPaint (m_vHij, &ps); SetRect (&rc, 0, 0, x_tamX, x_tamY); bgRgn = CreateRectRgnIndirect(&rc); hBrush = CreateSolidBrush(m_fond); FillRgn(dc, bgRgn, hBrush); SetBkMode (dc, m_fond); SetTextColor (dc, m_escr); // old = SelectObject(dc, m_letr); switch (m_alin) { case 0: DrawText(dc, m_pint, lstrlen(m_pint), &rc, DT_LEFT | DT_VCENTER | DT_SINGLELINE); break; case 1: DrawText(dc, m_pint, lstrlen(m_pint), &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE); break; case 2: DrawText(dc, m_pint, lstrlen(m_pint), &rc, DT_RIGHT | DT_VCENTER | DT_SINGLELINE); break; } // SelectObject(dc, old); // ReleaseDC(m_vHij, dc);
// DeleteObject(old); DeleteObject(bgRgn); DeleteObject(hBrush); DeleteObject(hPen); EndPaint (m_vHij, &ps);
SendMessage(m_vHij, WM_FONTCHANGE, (WPARAM)m_letr, 1); RedrawWindow(m_vHij,NULL,NULL,RDW_INVALIDATE | RDW_INTERNALPAINT);
break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(msg, wp, lp); } return 0; }
//------------------------ TSay * TSay::pCreando; //------------------------ LRESULT CALLBACK TSay::PrimerMensaje(HWND m_vHij, UINT msg, WPARAM wp, LPARAM lp) { pCreando->_Conectar(m_vHij);
return pCreando->WindowProc(msg, wp, lp); }
void TSay::_Conectar(HWND m_vHij) { DWORD dw; m_hWnd = m_vHij; dw = InitThunk(this); ::SetWindowLong(m_vHij, GWL_WNDPROC, dw); }
LRESULT TSay::DefWindowProc(UINT msg, WPARAM wp, LPARAM lp) { return m_lpOldProc ? ::CallWindowProc(m_lpOldProc, m_hWnd, msg, wp, lp) : ::DefWindowProc(m_hWnd, msg, wp, lp); }
Y viene llamada desde la clase principal que es: #include <windows.h> #include <iostream> #include <tlhelp32.h> #include <string> #include "CHSoft.h" #include <ctype.h> #include <stdio.h> #include "procesos.h"
using namespace std;
LRESULT CALLBACK WinPro (HWND, UINT , WPARAM, LPARAM); LRESULT CALLBACK WinPr2 (HWND, UINT , WPARAM, LPARAM); LRESULT CALLBACK WinPr3 (HWND, UINT , WPARAM, LPARAM); void InsertarMenu(HWND); void Inicio(HWND); bool Exists(CHAR* fname); bool ProcessRunning( const char* name ); void Salida(); void Pantalla(HWND, HINSTANCE); // int TSay(double, double, const char*, HWND, HFONT, COLORREF, COLORREF, double, double, int, int, HWND);
int APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) {
HWND oVentPrinc; MSG msg; WNDCLASSEX wincl; // EXTERN HINSTANCE hInst;
wincl.hInstance = hInstance; wincl.lpszClassName = "Principal"; wincl.lpfnWndProc = WinPro; wincl.style = CS_HREDRAW | CS_VREDRAW; wincl.cbSize = sizeof (WNDCLASSEX); wincl.hIcon = LoadIcon (hInstance, "CHSIcono"); wincl.hIconSm = LoadIcon (hInstance, "CHSIcono"); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(255,255,255));
if(!RegisterClassEx(&wincl)) return 0;
wincl.hInstance = hInstance; wincl.lpszClassName = "Hija"; wincl.lpfnWndProc = WinPr2; wincl.style = CS_HREDRAW | CS_VREDRAW; wincl.cbSize = sizeof (WNDCLASSEX); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(150,150,150));
if(!RegisterClassEx(&wincl)) return 0;
wincl.hInstance = hInstance; wincl.lpszClassName = "Hijo"; wincl.lpfnWndProc = WinPr3; wincl.style = CS_HREDRAW | CS_VREDRAW; wincl.cbSize = sizeof (WNDCLASSEX); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(150,150,150));
if(!RegisterClassEx(&wincl)) return 0;
oVentPrinc = CreateWindowEx( 0, "Principal", wtex001, WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL | WS_MAXIMIZE, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, HWND_DESKTOP, NULL, hInstance, NULL);
Inicio(oVentPrinc);
HWND oDlgVen;
oDlgVen = CreateWindowEx( 0, "Hija", wtex001, WS_DLGFRAME | WS_CHILD | WS_VISIBLE, 100*TamPan, 20*TamPan, 1080*TamPan, 710*TamPan, oVentPrinc, NULL, hInstance, NULL);
HWND oDlgBro;
oDlgBro = CreateWindowEx( 0, "Hijo", wtex001, WS_DLGFRAME | WS_CHILD | WS_VISIBLE, 100*TamPan, 20*TamPan, 1080*TamPan, 710*TamPan, oVentPrinc, NULL, hInstance, NULL);
SendMessage(oVentPrinc,WM_SETFONT,(WPARAM)oFont,MAKELPARAM(true,0));
Inicio(oVentPrinc); InsertarMenu(oVentPrinc); ShowWindow(oVentPrinc, SW_SHOWMAXIMIZED); ShowWindow(oDlgVen, SW_SHOW); ShowWindow(oDlgBro, SW_HIDE); UpdateWindow(oVentPrinc);
Pantalla(oDlgVen, hInstance);
// RedrawWindow(m_vHij,NULL,NULL,RDW_INVALIDATE | RDW_INTERNALPAINT);
while(TRUE == GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
LRESULT CALLBACK WinPro(HWND oVentPrinc, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_COMMAND: switch(LOWORD(wParam)) { case CYEENT: MessageBox(oVentPrinc, wtex001, wtex022, MB_OK); break; case CYEMAN: MessageBox(oVentPrinc, wtex002, wtex023, MB_OK); break; case CYELIC: MessageBox(oVentPrinc, wtex003, wtex024, MB_OK); break; case CYEDEM: MessageBox(oVentPrinc, wtex004, wtex025, MB_OK); break; case CYERES: MessageBox(oVentPrinc, wtex005, wtex026, MB_OK); break; case NYSENT: MessageBox(oVentPrinc, wtex006, wtex027, MB_OK); break; case NYSMAN: MessageBox(oVentPrinc, wtex007, wtex028, MB_OK); break; case NYSLIC: MessageBox(oVentPrinc, wtex008, wtex029, MB_OK); break; case NYSDEM: MessageBox(oVentPrinc, wtex009, wtex030, MB_OK); break; case NYSRES: MessageBox(oVentPrinc, wtex010, wtex031, MB_OK); break; case FYVENT: MessageBox(oVentPrinc, wtex011, wtex032, MB_OK); break; case FYVMAN: MessageBox(oVentPrinc, wtex012, wtex033, MB_OK); break; case FYVLIC: MessageBox(oVentPrinc, wtex013, wtex034, MB_OK); break; case FYVDEM: MessageBox(oVentPrinc, wtex014, wtex035, MB_OK); break; case FYVRES: MessageBox(oVentPrinc, wtex015, wtex036, MB_OK); break; case PAGWEB: MessageBox(oVentPrinc, wtex016, wtex037, MB_OK); break; case LICENC: MessageBox(oVentPrinc, wtex017, wtex038, MB_OK); break; case COMUNI: MessageBox(oVentPrinc, wtex018, wtex039, MB_OK); break; case CONSOL: MessageBox(oVentPrinc, wtex019, wtex040, MB_OK); break; case AYUPRO: MessageBox(oVentPrinc, wtex020, wtex041, MB_OK); break; case SALPRO: Salida(); break; } break; case WM_DESTROY: Salida(); break; default: return DefWindowProc(oVentPrinc, msg, wParam, lParam); case WM_SIZE: { RECT rWindow; GetWindowRect( oVentPrinc, &rWindow ); int nHt = rWindow.right - rWindow.left; int nWi = rWindow.bottom - rWindow.top; if ((nHt > (1200*TamPan)) | (nWi >= (800*TamPan))) ShowScrollBar(oVentPrinc, SB_BOTH, FALSE); else ShowScrollBar(oVentPrinc, SB_BOTH, TRUE); } } return 0; }
LRESULT CALLBACK WinPr2(HWND oDlgVen, UINT msg2, WPARAM wParam, LPARAM lParam) { HINSTANCE hInst; switch (msg2) { case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(oDlgVen, msg2, wParam, lParam); } return 0; }
LRESULT CALLBACK WinPr3(HWND oDlgBro, UINT msg3, WPARAM wParam, LPARAM lParam) { switch (msg3) { case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(oDlgBro, msg3, wParam, lParam); } return 0; }
void Salida() { PostQuitMessage(0); }
void InsertarMenu(HWND oVent) { HMENU hMenu01, hMenu02, hMenu03, hMenu04;
hMenu01 = CreateMenu(); hMenu02 = CreateMenu(); hMenu03 = CreateMenu(); hMenu04 = CreateMenu();
switch (TipCyE) { case 1: AppendMenu(hMenu02, MF_STRING, CYEENT, wtex015); AppendMenu(hMenu02, MF_STRING, CYEMAN, wtex018); AppendMenu(hMenu02, MF_STRING, CYELIC, wtex019); break; case 2: AppendMenu(hMenu02, MF_STRING, CYEDEM, wtex039); break; case 3: AppendMenu(hMenu02, MF_STRING, CYEDEM, wtex039); AppendMenu(hMenu02, MF_STRING, CYERES, wtex048); break; } switch (TipNyS) { case 1: AppendMenu(hMenu03, MF_STRING, NYSENT, wtex015); AppendMenu(hMenu03, MF_STRING, NYSMAN, wtex018); AppendMenu(hMenu03, MF_STRING, NYSLIC, wtex019); break; case 2: AppendMenu(hMenu03, MF_STRING, NYSDEM, wtex040); break; case 3: AppendMenu(hMenu03, MF_STRING, NYSDEM, wtex040); AppendMenu(hMenu03, MF_STRING, NYSRES, wtex048); break; } switch (TipFyV) { case 1: AppendMenu(hMenu04, MF_STRING, FYVENT, wtex015); AppendMenu(hMenu04, MF_STRING, FYVMAN, wtex018); AppendMenu(hMenu04, MF_STRING, FYVLIC, wtex019); break; case 2: AppendMenu(hMenu04, MF_STRING, FYVDEM, wtex041); break; case 3: AppendMenu(hMenu04, MF_STRING, FYVDEM, wtex041); AppendMenu(hMenu04, MF_STRING, FYVRES, wtex048); break; }
AppendMenu(hMenu01, MF_STRING | MF_POPUP, (UINT)hMenu02, wtex002); AppendMenu(hMenu01, MF_STRING | MF_POPUP, (UINT)hMenu03, wtex003); AppendMenu(hMenu01, MF_STRING | MF_POPUP, (UINT)hMenu04, wtex004); AppendMenu(hMenu01, MF_STRING , PAGWEB , wtex008); AppendMenu(hMenu01, MF_STRING , LICENC , wtex009); AppendMenu(hMenu01, MF_STRING , COMUNI , wtex010); AppendMenu(hMenu01, MF_STRING , CONSOL , wtex011); AppendMenu(hMenu01, MF_STRING , AYUPRO , wtex012); AppendMenu(hMenu01, MF_STRING , SALPRO , wtex013); SetMenu(oVent, hMenu01); }
void Inicio(HWND oVentPrinc) { if (Exists("CHSoft2.exe")) { PostQuitMessage(0); ShellExecute(GetDesktopWindow(), "open", "cambio.bat", NULL, NULL, SW_SHOWNORMAL); } else { if (ProcessRunning("CHSoft.exe")) PostQuitMessage(0); else { if (Exists("cyew32.exe")) TipCyE = 1; else { if (Exists("cyew32.res")) TipCyE = 3; else TipCyE = 2; } if (Exists("nysw32.exe")) TipNyS = 1; else { if (Exists("nysw32.res")) TipNyS = 3; else TipNyS = 2; } if (Exists("fyvw32.exe")) TipFyV = 1; else { if (Exists("fyvw32.res")) TipFyV = 3; else TipFyV = 2; } if ((ych / 800) < (xch / 1280)) TamPan = ych / 800; else TamPan = xch / 1280;
TamLet = 18 * TamPan; OSVERSIONINFO osv = { sizeof(OSVERSIONINFO) }; LPTSTR TipLet = TEXT("SEGOE UI"); if (osv.dwPlatformId == VER_PLATFORM_WIN32_NT && osv.dwMajorVersion >= 5) { TipLet = TEXT("Times New Roman"); } oFont = CreateFont(TamLet , 0, 0, 0, 400, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, TipLet); oFon2 = CreateFont(TamLet , 0, 0, 0, 400, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, TipLet); oFon3 = CreateFont(TamLet+9, 0, 0, 0, 800, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, TipLet); } } }
bool Exists(CHAR* fname) { if(INVALID_FILE_ATTRIBUTES == GetFileAttributes(fname) && GetLastError()==ERROR_FILE_NOT_FOUND) return false; return true; }
bool ProcessRunning( const char* name ) { HANDLE SnapShot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); int siono = 0; if( SnapShot == INVALID_HANDLE_VALUE ) return false; PROCESSENTRY32 procEntry; procEntry.dwSize = sizeof( PROCESSENTRY32 ); if( !Process32First( SnapShot, &procEntry ) ) return false; do { if( strcmp( procEntry.szExeFile, name ) == 0 ) { if (siono == 0) { siono = 1; } else return true; } } while( Process32Next( SnapShot, &procEntry ) ); return false; };
void Pantalla(HWND oDlgVen, HINSTANCE hInst) { HWND oPant,oPan2,oPan4,oPan401,oPan402,oMenPan,oMenPan01,oMenPan02,oMenPan03,oMenPan04,oMenPan05,oMenPan06,oMenPan07,oMenPan08,oMenPan09;
TSay oSay = TSay(hInst, 10*TamPan, 30*TamPan, wtex000, oDlgVen, oFont, escri1, fondo2,1020*TamPan, 77*TamPan, 0, 1, oPan4); oSay = TSay(hInst, 35*TamPan,340*TamPan, wtex000, oDlgVen, oFon3, escri1, fondo1, 630*TamPan, 30*TamPan, 1, 1, oPan401); oSay = TSay(hInst, 36*TamPan,341*TamPan, wtex001, oDlgVen, oFon3, escri3, fondo1, 628*TamPan, 28*TamPan, 0, 1, oPan402);
oSay = TSay(hInst, 95*TamPan, 30*TamPan, wtex000, oDlgVen, oFont, escri3, fondo1, 245*TamPan,555*TamPan, 0, 0, oMenPan); oSay = TSay(hInst,117*TamPan, 45*TamPan, wtex002, oDlgVen, oFont, escri1, fondo1, 243*TamPan, 28*TamPan, 0, 0, oMenPan01); oSay = TSay(hInst,147*TamPan, 45*TamPan, wtex003, oDlgVen, oFont, escri1, fondo1, 243*TamPan, 28*TamPan, 0, 0, oMenPan02); oSay = TSay(hInst,177*TamPan, 45*TamPan, wtex004, oDlgVen, oFont, escri1, fondo1, 243*TamPan, 28*TamPan, 0, 0, oMenPan03); oSay = TSay(hInst,207*TamPan, 45*TamPan, wtex008, oDlgVen, oFont, escri1, fondo1, 243*TamPan, 28*TamPan, 0, 0, oMenPan04); oSay = TSay(hInst,237*TamPan, 45*TamPan, wtex009, oDlgVen, oFont, escri1, fondo1, 243*TamPan, 28*TamPan, 0, 0, oMenPan05); oSay = TSay(hInst,267*TamPan, 45*TamPan, wtex010, oDlgVen, oFont, escri1, fondo1, 243*TamPan, 28*TamPan, 0, 0, oMenPan06); oSay = TSay(hInst,297*TamPan, 45*TamPan, wtex011, oDlgVen, oFont, escri1, fondo1, 243*TamPan, 28*TamPan, 0, 0, oMenPan07); oSay = TSay(hInst,327*TamPan, 45*TamPan, wtex012, oDlgVen, oFont, escri1, fondo1, 243*TamPan, 28*TamPan, 0, 0, oMenPan08); oSay = TSay(hInst,357*TamPan, 45*TamPan, wtex013, oDlgVen, oFont, escri1, fondo1, 243*TamPan, 28*TamPan, 0, 0, oMenPan09);
oSay = TSay(hInst, 95*TamPan,300*TamPan, wtex000, oDlgVen, oFont, escri1, fondo2, 750*TamPan,555*TamPan, 1, 0, oPant); oSay = TSay(hInst,105*TamPan, 30*TamPan, wtex000, oDlgVen, oFont, escri1, fondo2, 280*TamPan, 25*TamPan, 1, 0, oPan2); UpdateWindow(oDlgVen); }
Todas las llamadas a la clase están al final del todo en Pantalla() Me podéis ayudar para saber que error me está dando. Un saludo Carlos
|
|
|
4
|
Programación / Programación C/C++ / No muestra la ventana Hija
|
en: 10 Mayo 2016, 11:52 am
|
Hola a todos: Estoy intentando crear una ventana principal y dentro de ella otra que muestre cierta información como botones e imágenes, y ya he llegado a crear la ventana el menú y la segunda ventana pero no se que pasa pero no la muestra, podríais ayudarme. el cpp es el siguiente: #include <windows.h> #include <iostream> #include <tlhelp32.h> #include <string> #include "CHSoft.h" #include "procesos.h"
using namespace std;
LRESULT CALLBACK WinPro (HWND, UINT , WPARAM, LPARAM); LRESULT CALLBACK WinPr2 (HWND, UINT , WPARAM, LPARAM); void InsertarMenu(HWND); void Inicio(HWND); bool exists(CHAR* fname); bool ProcessRunning( const char* name ); long TSAY(); void tema(); int CreVenHij();
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { HWND oDlgVen; HWND oVentPrinc; MSG msg; WNDCLASSEX wincl;
wincl.hInstance = hInstance; wincl.lpszClassName = "Principal"; wincl.lpfnWndProc = WinPro; wincl.style = CS_DBLCLKS; wincl.cbSize = sizeof (WNDCLASSEX); wincl.hIcon = LoadIcon (hInstance, "CHSIcono"); wincl.hIconSm = LoadIcon (hInstance, "CHSIcono"); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(150,150,150));
if(!RegisterClassEx(&wincl)) return 0; oVentPrinc = CreateWindowEx( 0, "Principal", wtex001, WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL | WS_MAXIMIZE, CW_USEDEFAULT, CW_USEDEFAULT, 600, 400, HWND_DESKTOP, NULL, hInstance, NULL );
Inicio(oVentPrinc); ShowWindow(oVentPrinc, 3); InsertarMenu(oVentPrinc); int CreVenHij(); ShowWindow (oDlgVen, 5); while(TRUE == GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
LRESULT CALLBACK WinPro(HWND oVentPrinc, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_COMMAND: switch(LOWORD(wParam)) { case CYEENT: MessageBox(oVentPrinc, wtex001, wtex022, MB_OK); break; case CYEMAN: MessageBox(oVentPrinc, wtex002, wtex023, MB_OK); break; case CYELIC: MessageBox(oVentPrinc, wtex003, wtex024, MB_OK); break; case CYEDEM: MessageBox(oVentPrinc, wtex004, wtex025, MB_OK); break; case CYERES: MessageBox(oVentPrinc, wtex005, wtex026, MB_OK); break; case NYSENT: MessageBox(oVentPrinc, wtex006, wtex027, MB_OK); break; case NYSMAN: MessageBox(oVentPrinc, wtex007, wtex028, MB_OK); break; case NYSLIC: MessageBox(oVentPrinc, wtex008, wtex029, MB_OK); break; case NYSDEM: MessageBox(oVentPrinc, wtex009, wtex030, MB_OK); break; case NYSRES: MessageBox(oVentPrinc, wtex010, wtex031, MB_OK); break; case FYVENT: MessageBox(oVentPrinc, wtex011, wtex032, MB_OK); break; case FYVMAN: MessageBox(oVentPrinc, wtex012, wtex033, MB_OK); break; case FYVLIC: MessageBox(oVentPrinc, wtex013, wtex034, MB_OK); break; case FYVDEM: MessageBox(oVentPrinc, wtex014, wtex035, MB_OK); break; case FYVRES: MessageBox(oVentPrinc, wtex015, wtex036, MB_OK); break; case PAGWEB: MessageBox(oVentPrinc, wtex016, wtex037, MB_OK); break; case LICENC: MessageBox(oVentPrinc, wtex017, wtex038, MB_OK); break; case COMUNI: MessageBox(oVentPrinc, wtex018, wtex039, MB_OK); break; case CONSOL: MessageBox(oVentPrinc, wtex019, wtex040, MB_OK); break; case AYUPRO: MessageBox(oVentPrinc, wtex020, wtex041, MB_OK); break; case SALPRO: MessageBox(oVentPrinc, wtex021, wtex042, MB_OK); PostQuitMessage(0); break; } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(oVentPrinc, msg, wParam, lParam); case WM_SIZE: { RECT rWindow; GetWindowRect( oVentPrinc, &rWindow ); int nHt = rWindow.right - rWindow.left; int nWi = rWindow.bottom - rWindow.top; if ((nHt > (1200*TamPan)) | (nWi >= (800*TamPan))) ShowScrollBar(oVentPrinc, SB_BOTH, FALSE); else ShowScrollBar(oVentPrinc, SB_BOTH, TRUE); } } return 0; }
int CreVenHij() { MSG msg2; HWND oDlgVen; HWND oVentPrinc; WNDCLASSEX wincl2; HINSTANCE hInstanc2; wincl2.hInstance = hInstanc2; wincl2.lpszClassName = "Ventana Hija"; wincl2.lpfnWndProc = WinPr2; wincl2.style = CS_DBLCLKS; wincl2.cbSize = sizeof (WNDCLASSEX); wincl2.hCursor = LoadCursor (NULL, IDC_ARROW); wincl2.lpszMenuName = NULL; wincl2.cbClsExtra = 0; wincl2.cbWndExtra = 0; wincl2.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(250,250,150));
if(!RegisterClassEx(&wincl2)) return 0;
oDlgVen = CreateWindowEx ( 0, "Hija", "Ventana Hija", WS_CHILD | WS_POPUP, 0*TamPan, 0*TamPan, 600*TamPan, 800*TamPan, oVentPrinc, NULL, hInstanc2, NULL); while(TRUE == GetMessage(&msg2, NULL, 0, 0)) { TranslateMessage(&msg2); DispatchMessage(&msg2); } return msg2.wParam; }
LRESULT CALLBACK WinPr2(HWND oDlgVen, UINT msg2, WPARAM wParam, LPARAM lParam) { switch (msg2) { case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(oDlgVen, msg2, wParam, lParam); } return 0; }
void InsertarMenu(HWND oVentPrinc) { HMENU hMenu01, hMenu02, hMenu03, hMenu04; hMenu01 = CreateMenu(); hMenu02 = CreateMenu(); hMenu03 = CreateMenu(); hMenu04 = CreateMenu();
switch (TipCyE) { case 1: AppendMenu(hMenu02, MF_STRING, CYEENT, wtex015); AppendMenu(hMenu02, MF_STRING, CYEMAN, wtex018); AppendMenu(hMenu02, MF_STRING, CYELIC, wtex019); break; case 2: AppendMenu(hMenu02, MF_STRING, CYEDEM, wtex039); break; case 3: AppendMenu(hMenu02, MF_STRING, CYEDEM, wtex039); AppendMenu(hMenu02, MF_STRING, CYERES, wtex048); break; } switch (TipNyS) { case 1: AppendMenu(hMenu03, MF_STRING, NYSENT, wtex015); AppendMenu(hMenu03, MF_STRING, NYSMAN, wtex018); AppendMenu(hMenu03, MF_STRING, NYSLIC, wtex019); break; case 2: AppendMenu(hMenu03, MF_STRING, NYSDEM, wtex040); break; case 3: AppendMenu(hMenu03, MF_STRING, NYSDEM, wtex040); AppendMenu(hMenu03, MF_STRING, NYSRES, wtex048); break; } switch (TipFyV) { case 1: AppendMenu(hMenu04, MF_STRING, FYVENT, wtex015); AppendMenu(hMenu04, MF_STRING, FYVMAN, wtex018); AppendMenu(hMenu04, MF_STRING, FYVLIC, wtex019); break; case 2: AppendMenu(hMenu04, MF_STRING, FYVDEM, wtex041); break; case 3: AppendMenu(hMenu04, MF_STRING, FYVDEM, wtex041); AppendMenu(hMenu04, MF_STRING, FYVRES, wtex048); break; } AppendMenu(hMenu01, MF_STRING | MF_POPUP, (UINT)hMenu02, wtex002); AppendMenu(hMenu01, MF_STRING | MF_POPUP, (UINT)hMenu03, wtex003); AppendMenu(hMenu01, MF_STRING | MF_POPUP, (UINT)hMenu04, wtex004); AppendMenu(hMenu01, MF_STRING , PAGWEB , wtex008); AppendMenu(hMenu01, MF_STRING , LICENC , wtex009); AppendMenu(hMenu01, MF_STRING , COMUNI , wtex010); AppendMenu(hMenu01, MF_STRING , CONSOL , wtex011); AppendMenu(hMenu01, MF_STRING , AYUPRO , wtex012); AppendMenu(hMenu01, MF_STRING , SALPRO , wtex013); SetMenu (oVentPrinc, hMenu01); }
void Inicio(HWND oVentPrinc) { if (exists("CHSoft2.exe")) { PostQuitMessage(0); ShellExecute(GetDesktopWindow(), "open", "cambio.bat", NULL, NULL, SW_SHOWNORMAL); } else { if (ProcessRunning("CHSoft.exe")) PostQuitMessage(0); else { if (exists("cyew32.exe")) TipCyE = 1; else { if (exists("cyew32.res")) TipCyE = 3; else TipCyE = 2; } if (exists("nysw32.exe")) TipNyS = 1; else { if (exists("nysw32.res")) TipNyS = 3; else TipNyS = 2; } if (exists("fyvw32.exe")) TipFyV = 1; else { if (exists("fyvw32.res")) TipFyV = 3; else TipFyV = 2; } if ((ych / 800) < (xch / 1280)) TamPan = ych / 800; else TamPan = xch / 1280;
Tamlet = 18 * TamPan; OSVERSIONINFO osv = { sizeof(OSVERSIONINFO) }; LPTSTR szFont = TEXT("Times New Roman"); if (osv.dwPlatformId == VER_PLATFORM_WIN32_NT && osv.dwMajorVersion >= 5) { szFont = TEXT("SEGOE UI"); } oFont = CreateFont(Tamlet , 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, szFont); oFon2 = CreateFont(Tamlet , 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, szFont); oFon3 = CreateFont(Tamlet+3, 0, 0, 0, FW_BOLD , FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, szFont); } } }
bool exists(CHAR* fname) { if(INVALID_FILE_ATTRIBUTES == GetFileAttributes(fname) && GetLastError()==ERROR_FILE_NOT_FOUND) return false; return true; }
bool ProcessRunning( const char* name ) { HANDLE SnapShot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); const char* siono = "N"; if( SnapShot == INVALID_HANDLE_VALUE ) return false; PROCESSENTRY32 procEntry; procEntry.dwSize = sizeof( PROCESSENTRY32 ); if( !Process32First( SnapShot, &procEntry ) ) return false; do { if( strcmp( procEntry.szExeFile, name ) == 0 ) { if (siono == "N") { siono = "S"; } else return true; } } while( Process32Next( SnapShot, &procEntry ) ); return false; }; Gracias. Carlos.
|
|
|
5
|
Programación / Programación C/C++ / Como asignar tiupo a muchas variables
|
en: 8 Mayo 2016, 13:46 pm
|
Hola a todos:
Soy nuevo en C++ y todavía muy torpe, vengo de otro lenguaje y estoy tratando de usar el máximo de código y de funciones que hacía en él, paso a explicar una de ellas:
Yo podía definir el nombre de una variable poniéndola en otra y precediéndola del símbolo &.
Por ejemplo: { i = 1 for( int a = 1; a < 1000; a = a + 1 ) { var01 = "intvar"+str(a) int &var01 } }
Donde str() es una función que convierte un numero en caracteres para formar los nombres desde intvar0001 a intvar1000 e int &var01 lo que hacia era iniciar la variable de como se llamaba var01 en ese momento como int y así conseguía iniciar 1000 variables con un código pequeño.
Si alguien puede ayudarme muchas gracias.
Carlos
|
|
|
|
|
|
|