[VS 2015 C++] Resource Manager pro konzolovou aplikaci – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

[VS 2015 C++] Resource Manager pro konzolovou aplikaci – C / C++ – Fórum – Programujte.com[VS 2015 C++] Resource Manager pro konzolovou aplikaci – C / C++ – Fórum – Programujte.com

 

Polda18
~ Anonymní uživatel
8 příspěvků
16. 4. 2017   #1
-
0
-

Zdravím. Dělám si konzolovou aplikaci (bude to robotický editační nástroj Wikipedie - jeho použití ještě budu chtít diskutovat na Wikipedii, včetně implementace, nicméně si dělám základní skelet = rozeznávání příkazů). Abych nepsal stejný kus kódu (řetězce) do více částí programu, založil jsem si soubor Resources, kam si napíšu řetězce, které se opakují (jsou ve více částí programu - především tam, kde je program větven). Jenže jsem narazil na problém: konzolová aplikace je standardně neimportuje. Google si neví rady, nikde jsem se nedozvěděl, jak mám Resources do projektu přidat, aby to fungovalo.

Tento kus kódu je červeně podtržený: 

System::Resources::ResourceManager^ rm = gcnew System::Resources::ResourceManager(GetType());

Červeně VS podtrhává 'System', jelikož nerozezná namespace, a ještě konstruktor 'gcnew' včetně proměnné 'rm'.

Navíc chci přidat ikonu. Vím, že by to mělo jít i pro aplikaci určenou pro příkazový řádek. Jenže nevím, jak na to. V aplikaci Windows Forms stačilo nastavit ikonu projektu (C#), ale v projektu příkazové řádky (C++) jsem nenašel v nastavení projektu možnost pro změnu ikony.

Prosím, poradíte mi? Kromě těch řetězců bych rád přidal i ikonu (nejen pro tento projekt). Zde jsou includy pro můj program:

#include "stdafx.h"
#include <conio.h>
#include <windows.h>

#include <cstdio>
#include <iostream>
#include <string>
#include <vector>

Ještě jednou prosím, jak se dají použít Resources v konzolovém programu v C++?

Nahlásit jako SPAM
IP: 90.177.79.–
BDS+3
Věrný člen
16. 4. 2017   #2
-
0
-

#1 Polda18

Přidání ikony do konzole:
1. Resource Files->Add->NewItem source.rc (na názvu nezáleží, ale přípona musí být .rc)
2. Otevřít soubor source.rc a do něj napsat: MAINICON Icon "Ikona.ico" (Ikona.ico musí existovat ve složce se souborem source.rc)
3. provést kompilaci

(
Pokud se ti, změna ikony v exploreru ihned neprojeví musíš zavolat příkaz:
u Win 10: ie4uinit.exe –show
starší verze: ie4uinit.exe -ClearIconCache
)

Pro použití gcnew apd. bys musel dělat CLR projekt. (proto, ti to podtrhává)

Nahlásit jako SPAM
IP: 185.69.69.–
W11 :)
gna
~ Anonymní uživatel
1891 příspěvků
16. 4. 2017   #3
-
0
-

To je C++/CLI. Jestli to chceš psát v .NETu, tak použij C#. A na takovou ptákovinu přece nepotřebuješ resources.

Nahlásit jako SPAM
IP: 213.211.51.–
Polda18
~ Anonymní uživatel
8 příspěvků
16. 4. 2017   #4
-
0
-

#2 BDS
Díky za postup pro vložení ikony. Vyzkouším :)

#3 gna
Tak já chtěl trochu ušetřit paměť, aby se neopakovaly stejné řetězce několikrát v kódu. Zkusím tedy alternativu: globální proměnné. Mohu deklarovat konstantní proměnné typu 'std::string' nad všemi funkcemi?

Nahlásit jako SPAM
IP: 90.177.79.–
Radek Chalupa
~ Redaktor
+1
Super člen
16. 4. 2017   #5
-
0
-

#4 Polda18
Podobně jako ikonu můžeš vložit resource typu "string table" a pak použít:

wchar_t text[255];

LoadString(GetModuleHandle(NULL), ID_STRINGU, text, _countof(text));

nebo pokud chceš použít std::wstring a neřešit max. délku těch textů tak nějak takhle může vypadat funkce pro načtení stringu:

inline std::wstring nacist_string(_In_ UINT id_string)
{
	wchar_t* pres = nullptr;
	int delka = LoadString(GetModuleHandle(NULL), id_string, (LPWSTR)&pres, 0);
	if (delka == 0)
		terminate(); // popř. throw exception("picovina v kodu...");
	return std::wstring(pres, delka);
}

Radek Chalupa

www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
Polda18
~ Anonymní uživatel
8 příspěvků
16. 4. 2017   #6
-
0
-

#5 Radek Chalupa
Už jsem to vyřešil globálními konstantními proměnnými typu 'std::string' vloženými před definice funkcí. V samotných funkcích pak jen odkazuju na tyto proměnné. Funguje to :)

A ikonka je nastavena :)

Nahlásit jako SPAM
IP: 90.177.79.–
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, 54 hostů

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ý