Dá se získat HWND z HPROPSHEETPAGE? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Dá se získat HWND z HPROPSHEETPAGE? – C / C++ – Fórum – Programujte.comDá se získat HWND z HPROPSHEETPAGE? – C / C++ – Fórum – Programujte.com

 

oxidián0
Grafoman
9. 7. 2015   #1
-
0
-

Pozn. Ke klíči problému se dostávám až úplně nakonec nejdříve popisuji odkud beru HWND, ale pak nakonec stejně dojdu k tomu, že mám HPROPSHEETPAGE (handle stránky, na kterou chci vykreslit ovládací prvky nebo je schovat), ale nemám HWND. Takže je nějaká funkce, která mi vrátí ten handle na ovl. prvek?  Tady nic není https://msdn.microsoft.com/en-us/library/aa921598.aspx tak jak to vyřešit? Jak mám říct že chci na určité stránce překreslit prvky když ta stránka nemusí být aktivovaná. Příkaz dávám z menu.

Problém v souboru formsfunction.h includovaného někde z hlavního souboru:
PropSheetData propdata_local
HWND test = propdata_local.pages.map1;
Ve funkci potřebuju použít HWND ale nevím jak mám ten HWND získat.

void SwitchMapCopy(PropSheetData propdata_local){
	HWND hControl, test;
	test = propdata_local.pages.map1;
	static bool on;
	on = !on ? true : false; // expects Map Copy is off
	int i;
	for (i = 0; i<NUM_MAPCOPY_CONTROLS; i++ )
		{
		hControl = GetDlgItem(test, mapCopyControls[i]);
		if (hControl){
			if (on)
				ShowWindow(hControl, SW_SHOW);
			else
				ShowWindow(hControl, SW_HIDE);
			}
		else
			int a = 1;
		}
}

Hlavní soubor obsahuje:

bool Sheet_HandleCommand(HWND hSheet, WORD code, WORD id, HWND control)
{

bool ret = true;
	switch (id)
	{
	case ID_VIEW_MAPCOPY:
		if (GetMenuState(GetMenu(hSheet), ID_VIEW_MAPCOPY, MF_BYCOMMAND) & MF_CHECKED) {
			propdata.mapCopyOn = false;
      propdata.mapMatrixOn = true;
      // hide controls ....
			SwitchMapCopy(propdata);
			// clear check
			CheckMenuItem(GetMenu(hSheet), ID_VIEW_MAPCOPY, MF_BYCOMMAND);
			CheckMenuItem(GetMenu(hSheet), ID_VIEW_MAPMATRIX, MF_BYCOMMAND | MF_CHECKED);
		}
		else {
      propdata.mapCopyOn = true;
      propdata.mapMatrixOn = false;
			// show controls ...
      SwitchMapCopy(propdata);
			CheckMenuItem(GetMenu(hSheet), ID_VIEW_MAPCOPY, MF_BYCOMMAND | MF_CHECKED);
			CheckMenuItem(GetMenu(hSheet), ID_VIEW_MAPMATRIX, MF_BYCOMMAND);
		}
	break;


Když z menu vyberu položku Map Copy tak potřebuju schovat nebo zobrazit prvky, které jsou na stránce

HWND propdata.pages.map1

Sheet_HandleCommand ale obsahuje HWND hSheet; voláno odtud:...
 

INT_PTR CALLBACK MainDlgProc(HWND hSheet, UINT msg, WPARAM wParam, LPARAM lParam)
{
	INT_PTR ret = FALSE;

	switch (msg)
	{
	case WM_COMMAND:
		ret = 0;	//processing message
		if (!Sheet_HandleCommand(hSheet, HIWORD(wParam), LOWORD(wParam), (HWND)lParam))
			CALLPROC();
		break;
	default:
		return CALLPROC();
	}

	return ret;
}
pproc = (DLGPROC)SetWindowLong(hSheet, DWL_DLGPROC, (LONG)&MainDlgProc);
#define CALLPROC()	CallWindowProc((WNDPROC)pproc, hSheet, msg, wParam, lParam)
int WINAPI WinMain(HINSTANCE hWINAPI, HINSTANCE, LPTSTR cmdline, int cmdshow)
{
	MSG msg;
	BOOL ret;
	HWND hSheet 
....
	hSheet = MakeSheet(hWINAPI);
....
pproc = (DLGPROC)SetWindowLong(hSheet, DWL_DLGPROC, (LONG)&MainDlgProc);
}

Hláška kterou jsem dostal:

test = propdata_local.pages.map1;

Error    2    error C2440: '=' : cannot convert from 'HPROPSHEETPAGE' to 'HWND'   ... formsfunctions.cpp    52

Aby ale bylo jasné co má být v té struktruře propdata_local:

struct PAGES_t
{    // don't move!     // page index:
HPROPSHEETPAGE info;                // 0
HPROPSHEETPAGE players;        // 1
HPROPSHEETPAGE victory;        // 2
HPROPSHEETPAGE disables;        // 3
HPROPSHEETPAGE map1;            // 4
HPROPSHEETPAGE units1;            // 5
HPROPSHEETPAGE triggers1;    // 6
HPROPSHEETPAGE map2;            // 7
HPROPSHEETPAGE units2;            // 8
HPROPSHEETPAGE triggers2;    // 9
};

extern struct PropSheetData
{
    int pindex;            //current player number
    class Player *p;            //current player struct
    int sel0, sel1;    //page dependant, should be reset on SETACTIVE
    HWND statusbar;
    HWND mapview;
    HMENU menu;
    UINT tformat, ecformat, mcformat;    //clipboard formats
    bool mapMatrixOn;
    bool mapCopyOn;
    PAGES_t pages;
} propdata;

Nahlásit jako SPAM
IP: 78.45.87.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 97 hostů

Podobná vlákna

HWND jako int — založil LJ1024

Jak využít hwnd okna? — založil vanasi

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý