|
I put some snippets together this morning over coffee using Mr. Dunn's information and came up with these. See if these might help you to use gotoxy and clrscr in Visual C++.
#include "stdafx.h"
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
bool gotoxy(int x, int y)
{
// Sets the cursor position
COORD coord={x,y};
HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
if (hConsole!=INVALID_HANDLE_VALUE) {
if (SetConsoleCursorPosition(hConsole,coord)) {
return true;
}
}
return false;
}
bool ClrScr()
{
// Use a system call to clear the screen
if (system("cls")!= -1) {
return true;
}
return false;
}
bool clrscr()
{
// Use a custom function to clear the screen
COORD origin={0};
CONSOLE_SCREEN_BUFFER_INFO conInfo={0};
HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
if (hConsole!=INVALID_HANDLE_VALUE) {
if (GetConsoleScreenBufferInfo(hConsole,&conInfo)) {
int nLength=conInfo.dwSize.X*conInfo.dwSize.Y;
DWORD dwNum(0);
if (FillConsoleOutputAttribute(hConsole,
conInfo.wAttributes,
nLength,origin,&dwNum)) {
dwNum=0;
if (FillConsoleOutputCharacter(hConsole,
(TCHAR)'\0',nLength,origin,&dwNum)) {
if (gotoxy(origin.X,origin.Y)) {
return true;
}
}
}
}
}
return false;
}
int main(int argc, char* argv[])
{
printf("Hello World\n");
// ClrScr();
clrscr();
gotoxy(5,5);
printf("Hello again\n");
return 0;
}
|
|
|
|
|
In regards to the strange characters your getting...
What is book? Do you have the code snippet showing it's declaration?
|
|
|
|
|
"Book is a structure"
struct book
{
int accno;
char title[30];
char author[30];
float price;
int issued;
int nCopies;
int memno;
};
IM Using this structure in My CLASS
class library
{
book book1;
member member1;
public:
book newbook();
void list(fstream &);
void issuebook(fstream &, fstream &);
void returnbook(fstream &, fstream &);
member newmember();
void listofmembers(fstream &);
} ;
Proud To Be an Indian
|
|
|
|
|
Hi,
I have an old ANSI VC++ dialog based application which I would like to make it UNICODE enabled application. So I started converting all "char" types to "TCHAR" types. Howerever there is a certain piece of code that is sort of hardwired with statements like
const char cEscape = -16;
If I convert it to TCHAR equivalent and compile and execute
const TCHAR cEscape = (const TCHAR)-16;
the value of the cEscape variable (as seen in quickwatch window in VC++ debugger) is 65520
I am wondering should the value of the cEscape variable be 240 which is unsinged char equivalent of signed char -16 or the value 65520 is correct?
Can someone please clarify?
Thanks and Regards
|
|
|
|
|
How about
const TCHAR cEscape = _T('\xF0');
That keeps the value -16 (240 unsigned) and it's generic/portable.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thanks though I think my question is still unanswered.
If the value of cEscape should be 240 (_T('\xF0') then could there be a reason that the VC++ 2005 compiler is evaluting it to 65520 and not 240 !
I have checked the disassembly and it shows that the compiler is assigning 0xFFF0 to the cEscape variable and not 0x00F0.
Regards.
|
|
|
|
|
psychedelic_fur wrote: could there be a reason that the VC++ 2005 compiler is evaluting it to 65520 and not 240
Yes.
I tested this (note I'm using VC++ 2005 SP2 compiler):
const TCHAR cEscape = _T('\xF0');
TCHAR s[10];
s[0] = cEscape;
My compiler settings have "Treat wchar_t as Built-in Type" set to "Yes".
cEscape is 240 as expected.
If that setting isn't enabled, then the result may be different.
If wchar_t is treated as a signed short int then the the entire value gets
treated as negative. Not good.
I suppose you can try this (preferred):
const TCHAR cEscape = _T('\x00F0');
or mask off the high byte (lame but works)
const TCHAR cEscape = _T('\xF0') & 0x00FF;
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
The C++ standard does not dictate whether char is signed or unsigned. The default for char in Visual C++ is signed (but this can be changed with a compiler option). wchar_t is a typedef for unsigned short in older compilers and so is always unsigned.
This sounds like a value that is not used as a character, only as an 8-bit integer, and you should leave it as char rather than blindly converting to TCHAR . You should evaluate all uses of char carefully as it sounds like a codebase where a BYTE typedef was not used.
DoEvents : Generating unexpected recursion since 1991
|
|
|
|
|
I have to parse RSS channel definition XML file. I have appended one sample at the end of this topic.
I have installed MSXML parser 6 and uses it successfully. Please refer to function XmlRSSRead.
There are a lot of information about the channel and item of this channel. For example, one channel has title, link, description information. One channel may have a lot of item too. Each item also hase title, link, description information.
I have to extract title, link, description information in my application. I can not find one quick start guide from microsoft doucments.
Could anyone be kind to tell me what I should do next?
The following is the function I have now and the xml file I want to parse.
void XmlRSSRead( void )
{
//¡ä¡ä?¡§DOMDocument???¨®
MSXML2::IXMLDOMDocumentPtr pDoc;
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
if(!SUCCEEDED(hr))
{
AfxMessageBox( _T("?T¡¤¡§¡ä¡ä?¡§DOMDocument???¨®¡ê????¨¬2¨¦¨º?¡¤?¡ã2¡Á¡ã¨¢?MS XML Parser ??DD?a!") );
}
//?¨®?????t
pDoc->load( _T("D:\\temp\\mPhone\\Docs\\RSS\\nature.xml") );
//?¨²¨º¡Â?D2¨¦?¨°???achannel¦Ì??¨²¦Ì?,
// "//"¡À¨ª¨º??¨²¨¨?¨°a¨°?2?2¨¦?¨°
MSXML2::IXMLDOMElementPtr childNode ;
childNode = (MSXML2::IXMLDOMElementPtr)(pDoc->selectSingleNode("//channel"));
//¦Ì?¦Ì??¨²¦Ì?¨¤¨¤D¨ª
MSXML2::DOMNodeType nodeType;
childNode->get_nodeType(&nodeType);
//?¨²¦Ì???3?
BSTR var;
CString name;
childNode->get_nodeName(&var);
name = (char*)(_bstr_t)var;
//?¨²¦Ì??¦Ì
VARIANT varVal;
childNode->get_nodeTypedValue(&varVal);
CString strValue = (char*)(_bstr_t)varVal;
//?¨²¦Ì?¨º?D?,¡¤??¨²¨¢¡ä¡À¨ª?D
MSXML2::IXMLDOMNamedNodeMapPtr pAttrs = NULL;
MSXML2::IXMLDOMNodePtr pAttrItem;
childNode->get_attributes(&pAttrs);
long nCount ;
pAttrs->get_length(&nCount);
for(int i = 0 ; i < nCount ; i++)
{
pAttrs->get_item(i,&pAttrItem);
//?¨°???¨¦¨°?¨ª¡§1yo¡¥¨ºyget_nodeName,get_nodeTypedValue¦Ì?¦Ì?¨º?D???o¨ª¨º?D??¦Ì
//¨°2?¨¦¨°??¡À?¨®¦Ì?¦Ì?
CString strAttrName = (char*)(_bstr_t)pAttrItem->nodeName;
CString strAttrValue = (char*)(_bstr_t)pAttrItem->nodeTypedValue;
}
}
void mfXmlReadTest( void )
{
::CoInitialize(NULL);
MSXML2::IXMLDOMDocumentPtr spPtr;
HRESULT hr = spPtr.CreateInstance(__uuidof(MSXML2::DOMDocument30));
ASSERT(SUCCEEDED(hr));
spPtr->loadXML("<r>\n<t>top\nbottom\n");
spPtr->save("C:\\nature.xml");
spPtr.Release();
::CoUninitialize();
}
XMLÎļþÈçÏ£º
<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd" version="2.0">
<channel>
<title>Nature Podcast
http://www.nature.com/nature/podcast/rss/nature.xml <description>Nature is a weekly international journal publishing the finest peer-reviewed research in all fields of science. The Nature Podcast is a free weekly audio show highlighting content from each issue, and interviews with the scientists creating the data. The Nature Podcast provides insight and context to groundbreaking research, and allows the scientists to explain the significance of their work in their own words.
<language>en
<copyright>© 2006 Nature Publishing Group
<lastbuilddate>Wed, 25 Jul 2007 18:00:00 GMT
<category>Science & Medicine
<category>Technology
<url>http://www.nature.com/nature/podcast/images/nature_rss_logo.png
<title>Nature
http://www.nature.com/nature/podcast/rss/nature.xml <width>144
<height>144
<itunes:author>Nature
<itunes:subtitle>Interviews, insight and highlights of the latest scientific discoveries, every week in Nature
<itunes:summary>Nature is a weekly international journal publishing the finest peer-reviewed research in all fields of science. The Nature Podcast is a free weekly audio show highlighting content from each issue, and interviews with the scientists creating the data. The Nature Podcast provides insight and context to groundbreaking research, and allows the scientists to explain the significance of their work in their own words.
<itunes:owner>
<itunes:name>Nature
<itunes:email>podcast@nature.com
<itunes:category text="Science & Medicine">
<itunes:category text="Technology">
<itunes:image href="http://www.nature.com/nature/podcast/images/nature_itunes_logo.png">
<item>
<title>Nature Podcast: 26 July 2007
http://www.nature.com/nature/podcast/v448/n7152/nature-2007-07-26.mp3 <description>?26 July: Rain changes of our own making, science in the Simpsons, Californian-style plate rifts, investigating inflammatory bowel disease, pygmies with palm pilots.
<guid>http://www.nature.com/nature/podcast/v448/n7152/nature-2007-07-26.mp3
<enclosure url="http://www.nature.com/nature/podcast/v448/n7152/nature-2007-07-26.mp3" length="13343922" type="audio/mpeg">
<pubdate>Wed, 25 Jul 2007 18:00:00 GMT
<category>Science & Medicine
<category>Technology
<itunes:author>Nature
<itunes:subtitle>?26 July: Rain changes of our own making, science in the Simpsons, Californian-style plate rifts, investigating inflammatory bowel disease, pygmies with palm pilots.
<itunes:duration>37:03
<itunes:explicit>no
<itunes:category text="Science & Medicine">
<itunes:category text="Technology">
<itunes:keywords>nature, podcast, science, technology, education, science news, biology, physics, genetics, astronomy, astrophysics, quantum physics, evolution, evolutionary biology, geophysics, climate change, earth science, materials science, science policy, medicine, systems biology, genomics, palaeobiology, ecology, molecular biology, cancer, immunology, pharmacology, developmental biology, biochemistry, bioinformatics, nanotechnology, biotechnology, drug discovery, environmental science, life, marine biology, medical research, neuroscience, rna, dna, cell cycle, signal transduction, cell signalling
|
|
|
|
|
I would generally use selectNodes or selectSingleNode with an XPath expression to find particular information in an XML document.
DoEvents : Generating unexpected recursion since 1991
|
|
|
|
|
hi,
I've added a set of strings(from Database) to my combo box using
membervariable.AddString(CString)
Now,How can i add a set of integers to my combo box.
Can any one tell mi a solution for this...with a clear example(as i'm a beginner).
if so please tell me how to add the floats to the same..
thank you in advance..........
|
|
|
|
|
You can convert your numeric types to strings...
int i = 42;
CString str;
str.Format(_T("%d"), i);
m_combobox.AddString(str);
double d = 1.23456;
CString str;
str.Format(_T("%.3f"), d);
m_combobox.AddString(str);
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
hai mark,
even i wanted to suggest the same,but before hitting reply, i saw your name ,got diverted towards your post, and dropped my idea.
your post is more descriptive.
Mark Salsbery wrote: str.Format(_T("%d"), i);
can you please explain me why you have used _T there.
thank you.
Suggestion to the members:
prefix your main thread subject with [SOLVED] if it is solved.
chandu.
|
|
|
|
|
chandu004 wrote: can you please explain me why you have used _T there.
I use the generic text mappings everywhere.
In this case, I'm using a CString, which is a generic type
(unlike CStringA and CStringW).
CString::Format() takes a PCXSTR as its first argument so I
use _T() to get that type.
This will compile on both Unicode and non-Unicode builds...
that's the whole idea
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
|
thanks mark.
i feel that, observing your posts one day is equalent to reading one book per day.
Suggestion to the members:
prefix your main thread subject with [SOLVED] if it is solved.
chandu.
|
|
|
|
|
Of course sometime forums are better than books like this forum.
|
|
|
|
|
I hope this is the correct forum, I use Borland's TMemo textpad and want to know the character position of my mouse cursor, so in MouseMove I do the following:
// X and Y are in client space
void __fastcall MyApp::Memo1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
TPoint mousePos;
mousePos.x = X;
mousePos.y = Y;
int charPos = SendMessage(Memo1->Handle, EM_CHARFROMPOS, 0, (LPARAM)&mousePos);
}
The problem is charPos is always -1, even when I move the mouse over text in the Memo. Any ides whats wrong?
|
|
|
|
|
I'm guessing your cursor coordinates passed to MyApp::Memo1MouseMove()
are in screen coordinates but the EM_CHARFROMPOS message expects coords
relative to the client area of the edit control.
What happens if you do this...
void __fastcall MyApp::Memo1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
TPoint mousePos;
mousePos.x = X;
mousePos.y = Y;
<font color="Red">ScreenToClient(</font>Memo1->Handle, &mousePos<font color="Red">);</font>
int charPos = SendMessage(Memo1->Handle, EM_CHARFROMPOS, 0, (LPARAM)&mousePos);
}
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
nope, the X and Y I get are in client coordinates. Yet I tried ScreenToClient just for fun, with no luck though.
|
|
|
|
|
Hmm... It was worth a shot.
I don't remember TMemo - is it really a windows edit control or
rich edit control? If not, the message may not work (unless the
window is designed to handle the message the same as the Windows
common controls does).
Otherwise, the only reason -1 should be returned is if the cursor
is not in the client area of the control.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
It is an edit control. Maybe that is the problem then? That would be bad, I have based all my code on this control...
The cursor is inside the client, I get correct mouse positions...
|
|
|
|
|
Try this:
// X and Y are in client space
void __fastcall MyApp::Memo1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
int charPos = SendMessage(Memo1->Handle, EM_CHARFROMPOS, 0, MAKELPARAM((WORD)x,(WORD)y));
}
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Yes! That worked, thanks a lot!
I had actually read somewhere that there was a bug in MAKELPARAM that would sometimes throw an exception but it seems to work fine for me, thanks again.
|
|
|
|
|
LejonO wrote: I had actually read somewhere that there was a bug in MAKELPARAM that would sometimes throw an exception
I don't think that's possible - it's just a macro that does some bitwise
operations on the arguments
Cheers,
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|