|
Here's some MFC code. I hope this helps....I left it to you to layout the controls and provide them an ID...
(The sample assumes it's in a CDialog derived class, using "this" as the parent of the checkbox control(s))
TRY
{
CStdioFile file(_T("c:\\dialogitem.txt"), CFile::modeRead | CFile::shareDenyNone);
CString LineStr;
while (file.ReadString(LineStr))
{
int i = 0;
CString CaptionStr = LineStr.Tokenize(_T(" "), i);
CString CheckStr = LineStr.Tokenize(_T(" "), i);
int CheckState = (_tstol(CheckStr) == 0) ? BST_UNCHECKED : BST_CHECKED;
CRect CtrlRect(...);
UINT CtrlID = ...;
CButton NewCheckBox;
NewCheckBox.Create(CaptionStr, WS_VISIBLE | WS_CHILD | BS_CHECKBOX, CtrlRect, this, CtrlID);
NewCheckBox.SetCheck(CheckState);
NewCheckBox.Detach();
}
file.Close();
}
CATCH( CFileException, e )
{
}
END_CATCH
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hello I can't figure this out . Here is my class and functions
For some reason the OnUpdate function is only printing the first column
and not the other 1
What am I doing wrong?? thx
// viewcView.h : interface of the CViewcView class
//
/////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_VIEWCVIEW_H__C9A435B3_A707_486C_820E_191CD7126DDD__INCLUDED_)
#define AFX_VIEWCVIEW_H__C9A435B3_A707_486C_820E_191CD7126DDD__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CViewcView : public CView
{
protected: // create from serialization only
CViewcView();
DECLARE_DYNCREATE(CViewcView)
CListCtrl m_List;
// Attributes
public:
CViewcDoc* GetDocument();
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CViewcView)
public:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
virtual void OnInitialUpdate(); // first time after construct
virtual void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint);
protected:
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CViewcView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
// Generated message map functions
protected:
//{{AFX_MSG(CViewcView)
// NOTE - the ClassWizard will add and remove member functions here.
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
#ifndef _DEBUG // debug version in viewcView.cpp
inline CViewcDoc* CViewcView::GetDocument()
{ return (CViewcDoc*)m_pDocument; }
#endif
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_VIEWCVIEW_H__C9A435B3_A707_486C_820E_191CD7126DDD__INCLUDED_)
// viewcView.cpp : implementation of the CViewcView class
//
#include "stdafx.h"
#include "viewc.h"
#include "viewcDoc.h"
#include "viewcView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CViewcView
IMPLEMENT_DYNCREATE(CViewcView, CView)
BEGIN_MESSAGE_MAP(CViewcView, CView)
//{{AFX_MSG_MAP(CViewcView)
// NOTE - the ClassWizard will add and remove mapping macros here.
ON_WM_CREATE()
ON_WM_SIZE()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CViewcView construction/destruction
CViewcView::CViewcView()
{
// TODO: add construction code here
}
CViewcView::~CViewcView()
{
}
int CViewcView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
CRect rect;
GetClientRect(rect);
VERIFY (m_List.Create (WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SINGLESEL,
CRect (0, 0, 0, 0), this, 1));
return 0;
}
void CViewcView::OnInitialUpdate()
{
CView::OnInitialUpdate();
VERIFY (-1 != m_List.InsertColumn (0, "Part Number", LVCFMT_LEFT, 100));
VERIFY (-1 != m_List.InsertColumn (1, "Part Desc", LVCFMT_LEFT, 100));
}
void CViewcView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
CView::OnUpdate (pSender, lHint, pHint);
int nItem = m_List.InsertItem(0, "column0");
m_List.SetItemText(nItem, 1, "column1");
}
BOOL CViewcView::PreCreateWindow(CREATESTRUCT& cs)
{
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CViewcView drawing
void CViewcView::OnDraw(CDC* pDC)
{
CViewcDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CViewcView printing
BOOL CViewcView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CViewcView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CViewcView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CViewcView diagnostics
#ifdef _DEBUG
void CViewcView::AssertValid() const
{
CView::AssertValid();
}
void CViewcView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CViewcDoc* CViewcView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CViewcDoc)));
return (CViewcDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CViewcView message handlers
void CViewcView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
m_List.MoveWindow (0, 0, cx, cy);
}
-- modified at 18:26 Thursday 30th August, 2007
|
|
|
|
|
shiftwik wrote: For some reason the OnUpdate function is only printing the first column
and not the other 2
You've only created two columns, not three.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Why is the view derived from CView instead of CListView ? I would not even bother trying to figure out what is wrong (which is a combination of creating the control dynamically and the OnSize() method) until I at least did that.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
It has been quite a while. I have a task to identify a calling Windows' batch script's name and its location. Basically, the batch script calls/spawns my C++ executable as a parent process and I failed to identify the parent. I can identify a number of different calling processes using NtQueryInformationProcess(), but failed to do so to the batch script. The main reason is that the batch process is shown as cmd.exe not a real script name. Any idea?
Thanks a lot for the help.
Jack
|
|
|
|
|
hi,
i need to assign port in a TDI server code.
how can i do this ?
I know i have use TdiBuildListen function to assign port, but i have not been able to assign properly.
Can anyone help me in this regards ?
With thanks in advance,
barun
barun
|
|
|
|
|
Hi guys. I hope someone can help beacuse I am new at MFC and I am running out of time.
I need to write a MFC program which will simply read some text file and display it. The other thing is that I need to add a search option to the program. When you search some word, and if it is found in the displayed text it should be displayed in different color.
I have been fighting with this for a week and still no success. Can someone at least tell me how to start on the right track, wich base class should i use, how should I display the text, and finally, how to color the words that have been found?????
Any links or code samples would really help.......
thanx
|
|
|
|
|
Try using CFileDialog and search it up on MSDN
|
|
|
|
|
I used CFileDialog just to open the file. And I managed to display the text with DrawText function within a rectangule of variable dimensions. But how can I display let's say one word in yellow color and one word in red? I only managed to display whole text in one color.....
|
|
|
|
|
Are you using a CEdit editbox? I don't think it's possible to highlight in different colors in a CEdit. I haven't worked in MFC a lot, but you can try Rich Edit and see if there's a function in there.
|
|
|
|
|
Call TextOut or DrawText twice, with a call to SetTextColor before painting each of the two words.
|
|
|
|
|
the problem is that drawtext uses CRect in it. So i would than have to determine a exact rectangule position each time I want to change the color of the text. I don't think that this is a good solution.
Any other idea? if it is easier, do you know how to draw a rectangle over the word you searched for in the text?
|
|
|
|
|
I think there's no easier way, except maybe using CRichEditCtrl.
|
|
|
|
|
You can generate a project to do this in Visual Studio.
Almost all point and click (a tiny bit of typing).
Use the Add new project dialog -
Choose MFC application, give it a name
Do NOT choose Unicode option
Choose doc/view support and pick SDI or MDI.
Change the app file types/extensions to "Text", "txt", etc.
In the generated classes tab, change the view base class to CEditView
Build the project - you have a working text editor.
Edit the menu resource and add a "Find..." item to the "Edit" popup (give it the id "ID_EDIT_FIND")
Build the project - you now have text search capability.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
I tried that, but the problem is that when i press the button search and let's say that searched word was "mfc", then in one click all mfc should be highlighted in the whole text.
I hope you understood what I need to achive. Me and my english language......
thanx
|
|
|
|
|
I thought so, but I thought I'd throw that out there just in case.
As others have mentioned, you'll need to render the text yourself or use a richedit control.
Either way you'll need to search the text and keep track of where the found items are.
If you use a richedit control, the control will do the rendering for you - all you need to do is
change the text color of all the found items.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
How do I keep track of where the founded words are exactly?
I used the SetWindowText to display the text and it works.
Do you have any idea how ti keep track of the founded words?
p.s. yes, i use now RichEditBox
|
|
|
|
|
Mark Salsbery wrote: Do NOT choose Unicode option
Now that's a refreshing change.
And I thought I was the only one.
|
|
|
|
|
LOL I must admit, using a Unicode build in that case required extra steps that
I was way too lazy to figure out (for free).
It was just a 3 minute text editor solution.
Cheers!
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
I was little slow on the draw to offer solution but since I am working on similar stuff here is my 2 cents worth.
I ended up replacing CEditCtrl with CRichEditCtrl.
The color change is not too difficult. Here are my test functions straight from the MS documentation.
void CCC_RichEdit::OnReplaceAll( LPCTSTR lpszFind,
LPCTSTR lpszReplace, BOOL bCase, BOOL bWord )
{
int m_nNumReplaced;
CWaitCursor wait;
// no selection or different than what we are looking for
if (!FindText(lpszFind, bCase, bWord))
{
CRichEditView::OnTextNotFound( lpszFind );
return;
}
GetRichEditCtrl().HideSelection(TRUE, FALSE);
m_nNumReplaced = 0;
do
{
// change text color
OnCharUnderline();
//GetRichEditCtrl().SetBackgroundColor(FALSE, RGB(155,0, 0));
GetRichEditCtrl().ReplaceSel(lpszReplace);
m_nNumReplaced++; // Record the number of replacements
} while (FindTextSimple(lpszFind));
GetRichEditCtrl().HideSelection(FALSE, FALSE);
}
void CCC_RichEdit::OnCharUnderline ()
{
CHARFORMAT cf;
cf = GetCharFormatSelection ();
if (!(cf.dwMask & CFM_UNDERLINE) || !(cf.dwEffects & CFE_UNDERLINE))
{
cf.dwEffects = CFE_UNDERLINE;
}
else
cf.dwEffects = 0;
// change text color
cf.dwMask = CFM_UNDERLINE |CFM_COLOR ;
cf.crTextColor = RGB(255,0, 0);
SetCharFormat (cf);
}
This code does not change background color, work in progress.
Few observations - it seem that CFE_AUTOCOLOR is not set as default and does not have to be removed to make color changes.
Right now I cannot make "regular" pop up to work.
My question to the group - where is the documentation stating that double click on text selects it? Obviously I need to "override" that pretty useless action.
Thanks guys. Very helpful discussion.
|
|
|
|
|
hello,
How can i open a text file i excel using a schell command in c++.
if there is another it is ok.
10x regards
dghdfghdfghdfghdgh
|
|
|
|
|
ellllllllie wrote: How can i open a text file i excel using a schell command in c++.
Read the "Shell" API documentation. Note, it is NOT "Schell", you won't find it using that.
ellllllllie wrote: if there is another it is ok.
There is also the Excel Object Model. Again you should read the documentation
|
|
|
|
|
|
Isnt it "excel.exe" - sorry if I am wrong :p
--PerspX
"Nowadays, security guys break the Mac every single day. Every single day, they come out with a total exploit, your machine can be taken over totally. I dare anybody to do that once a month on the Windows machine." - Bill Gates
BSoD during a Win98 presentation
|
|
|
|
|
it isn't important: using ShellExecute you can open what file you want with the application you want (if it can). Look to its help.
Or explain more details if it doesn't help.
Russell
|
|
|
|
|