|
Hello
Thanks Mayank for your replies!
It was really nice to have this talk with you.
Regards
|
|
|
|
|
hi, i am loading a text file into this buffer , FILE *buffer = fopen("text.txt", "r");
i need to print it out again in a LPCTSTR pszText, i need a simple conversion for that thanks.
|
|
|
|
|
You will need to allocate a buffer and call fread()
FILE *infile;
if ((infile = _tfopen(sFilename,_T("rb") )) == NULL) {
return FALSE;
}
fseek(infile , 0 , SEEK_END);
long lSize = ftell(infile);
rewind(infile);
char* pszIn = new char[lSize];
fread(pszIn,1,lSize,infile);
fclose(infile);
|
|
|
|
|
Ok that worked but it triggers and character test assert (<= 256) and if i ignore it i get the blablaí0
the text file contained blabla
|
|
|
|
|
Could you show me the relevent code? Where is the failiure happening?
|
|
|
|
|
text is the final conversion, taken from bellow. m_pTextBuffer->InsertText(this, ptCursorPos.y, ptCursorPos.x, text, y, x, CE_ACTION_PASTE);
void OnScriptMission()
{
if (m_pTextBuffer == NULL)
return;
m_pTextBuffer->BeginUndoGroup();
FILE *buffer;
if ((buffer = _tfopen("text.txt",_T("rb") )) == NULL) {
return;
}
// obtain file size.
fseek(buffer , 0 , SEEK_END);
long lSize = ftell(buffer);
rewind(buffer);
//read in the contents of the input file
char *text = new char[lSize];
fread(text,1,lSize,buffer);
CPoint ptCursorPos = GetCursorPos();
ASSERT_VALIDTEXTPOS(ptCursorPos);
int x, y;
m_pTextBuffer->InsertText(this, ptCursorPos.y, ptCursorPos.x, text, y, x, CE_ACTION_PASTE);
ptCursorPos.x = x;
ptCursorPos.y = y;
ASSERT_VALIDTEXTPOS(ptCursorPos);
SetAnchor(ptCursorPos);
SetSelection(ptCursorPos, ptCursorPos);
SetCursorPos(ptCursorPos);
EnsureVisible(ptCursorPos);
m_pTextBuffer->FlushUndoGroup(this);
fclose(buffer);
}
|
|
|
|
|
It;s hard to tell where it's going wrong from the code you posted. What is the insertText() function? Also, since you're already using MFC, why not use the CFile class to read the file?
|
|
|
|
|
hardcoded char array works though
insertText is to keep track on undo \redo etc, but ive tested hardcoded data , and they work so i doubt there is anything wrong with it.
i can give CFile a try, thanks for your help.
|
|
|
|
|
this fixed the problem
//read in the contents of the input file
char *text = new char[lSize+1];
fread(text,1,lSize,buffer);
text[lSize] = 0;
// //
a newline ...
|
|
|
|
|
Ah yes, my mistake, you are dealing with strings so you would need to allow for the null terminator. That snippet comes from a binary file reader where the extra character would corrupt my data stream.
|
|
|
|
|
I want to develop several lines of text within my program. Then I want to display all the lines in an edit box at the same time. Say I have ten lines of text. I want to manipulate those lines, then display all ten lines at one time in the edit box. The edit box would never show more than ten lines at any one time.
Problem: I can't get more than one line at a time to display.
Edit box is set to multiline and want return.
Here is what I tried:
void CTestEditBoxDlg::OnButton1()
{
void CTestEditBoxDlg::OnButton1()
{
CString sString1 = "First Line\nSecond Line\n...Last Line\n";
m_Edit1 = sString1;
UpdateData(FALSE);
}
}
Any ideas? Is an edit box the wrong approach?
|
|
|
|
|
Sorry. I pasted too much code. Here is the code I used:
void CTestEditBoxDlg::OnButton1()
{
CString sString1 = "First Line\nSecond Line\n...Last Line\n";
m_Edit1 = sString1;
UpdateData(FALSE);
}
|
|
|
|
|
specify "\r\n" as a carriage-return/line-feed combination
|
|
|
|
|
The \r\n worked perfectly. Thanks.
|
|
|
|
|
Hi All,
I'm having problem with hiding the system menu close (X) button for MessageBox, please help me on this.
Thanks & Regards,
Pradeep
Pradeep
|
|
|
|
|
I don't think you can do it. You need to build your own message box.
Best,
Jun
|
|
|
|
|
Try with
SetClassLong(hDlg, GetClassLong(hDlg, GCL_STYLE) | CS_NOCLOSE);
to disable it.
If you want to hide it, remove the system menu style in dialog editor, if is acceptable.
|
|
|
|
|
Ya i will try for it. Thanks for the info.
|
|
|
|
|
You could always try using the Xmessagebox[^] which you are able to customize as much as you want.
|
|
|
|
|
There are so many tutorials and posts about this that it's kinda hard to find exactly what I want. I have two processes, both sharing the same dll. Each process uses a class located in the dll. basicly the first process initializes the class, the second process reads it. The class itself contains many C type strings, some of them quite large, but when trying to read from the class I am getting NULL pointers. The class itself is not the problem, but sharing it and the data within is.
#pragma data_seg (".shared")
CMyClass cMonitor;
BOOL bSuccess = FALSE;
#pragma data_seg ()
#pragma comment(linker,"/SECTION:.shared,RWS")
My first attempt was to store a pointer to the class, but that failed misserably. I'm guessing the same problem is affecting the strings within the class, but I have no idea how to do it correctly.
|
|
|
|
|
|
yeah I figured the only way to do what I want is to use a mapped file. I'm now scouring the internet looking for examples. I realise there are many on CP, but each of them only show the method of storing a single string. I'm looking to store multiple strings in the same file. I know it's possible by placing the strings one after another, but handling the location of each is where it gets tricky. So before I start writing the code for this, i want to make sure it hasn't already been done (and probably done better).
|
|
|
|
|
I'd try in two ways:
1. The dll keeps internally its data as desired, and the client processes will supply buffers to the exported dll class; in return, the dll will fill buffers back to client (a la COM).
Dll:
<br />
class Dll {<br />
...<br />
public:<br />
virtual bool GetMeData(IN "ID" whatYouNeed, IN OUT ULONG *pulSize, IN LPTSTR pStr) {<br />
_tcsncpy(pStr, m_pszString, *pulSize);<br />
*pulSize = lstrlen(pStr);<br />
return true;<br />
}<br />
...<br />
private:<br />
LPTSTR m_pszString;<br />
}<br />
Process:
(ULONG ulSize = 255;<br />
LPTSTR pStr = new TCHAR[ulSize + 1];<br />
pDll->GetMeData("thatOne", &ulSize, pStr);<br />
2. GlobalAlloc/GlobalLock, or an IPC mechanism.
|
|
|
|
|
I am taking the IPC approach on this one. It's about time I got my head around all this inter process chit chat. I'm currently putting together a small class which will store multiple strings/(who knows what else) into the mapped file. This may even turn into an article.
|
|
|
|
|
how i can catch message come out from dll that i use in my program so i can post another message instade of dll one
|
|
|
|