|
|
I mean multiple rows of 1 column each.
Kuphryn
|
|
|
|
|
That doesnt work. I need the Colums. But the first and the last row should be a special row (a kind of header...)
|
|
|
|
|
I'm having a problem with the Outline method not working after I've applied a certain transformation to the GraphicsPath object (see code below). The problem occurs after the GraphicsPath object is scaled with either the X factor or/and the Y factor set to a negative value (causing flip/mirror).
Code:
GraphicsPath path1;
GraphicsPath path2;
path1.AddString(L"GDI+", -1, &family, FontStyleRegular, 144, rect, &format);
path2.AddString(L"GDI+", -1, &family, FontStyleRegular, 144, rect, &format);
REAL offsetX = rect.GetLeft() + rect.Width / 2.0f;
REAL offsetY = rect.GetTop() + rect.Height / 2.0f;
Matrix matrix;
matrix.Translate(-offsetX, -offsetY, MatrixOrderAppend);
matrix.Scale(1.0f, -1.0f, MatrixOrderAppend);
matrix.Translate(offsetX, offsetY + 110.0f, MatrixOrderAppend);
path2.Transform(&matrix);
Pen pen(Color(255, 255, 0, 0));
path1.AddPath(&path2,TRUE);
path1.Outline();
pGraphics->DrawPath(&pen, &path1);
Any light on this problem would be much appreciated.
(Using VC 6.0 and the C++ version of GDI+)
|
|
|
|
|
I need help with AfxBeginThread.
I'm trying to use it but get error.
I have a function that does the processing in my program. It doesn't take any paramaters. How can I execute it as a threat in my MFC application?
Help!
Fr
|
|
|
|
|
Something like this will work
void CMyClass::StartNewThread()
{
m_hThread = reinterpret_cast<handle>(
_beginthreadex( NULL, NULL, &_ThreadFunc,
this, CREATE_NORMAL, &dwThreadID ));
}
unsigned _stdcall CMyClass::_ThreadFunc( LPVOID arg )
{
CMyClass *pWrker = (CScrCMyClass *)arg;
pWrker->TheadFunct();
return 0;
}
|
|
|
|
|
Is this compatible with MFC?
|
|
|
|
|
If you are manipulating MFC object from this thread derive your class from CWinThread. If not code I posted works just fine. Just don't use CreateThread because of CRT....
Brian
|
|
|
|
|
When _ThreadFunc is a class member function it have to be a static function becaude of the this pointer passed to all non-static memberfunctions.
Your example will not compile unless it's declared as static .
- Anders
Money talks, but all mine ever says is "Goodbye!"
|
|
|
|
|
|
I've got an EditView, and I would like to change the behaviour of the tab key.
I want to pad my own spaces depending on where I am.
The changes applied in OnChar(), are apparently too late in the process. Can someone tell me where I can stop tab from tabbing?
Or should I just select the last character in OnChar(), and overwrite it with the spaces I want?
Thanks!
BW
"We get general information and specific information, but none of the specific information talks about time, place or methods or means..."
- Tom Ridge - US Secretary of Homeland Security
|
|
|
|
|
Override PreTranslateMessage
if ((pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_TAB))
{
...
}
do something
|
|
|
|
|
That got me to process before the 'Tab'(which is new to me ), but does not stop the tab from processing.
I've opted to delete the tab, after the fact, and place the spaces I need.
Thanks for your help!
BW
"We get general information and specific information, but none of the specific information talks about time, place or methods or means..."
- Tom Ridge - US Secretary of Homeland Security
|
|
|
|
|
>but does not stop the tab from processing.
did you return from preTranslateMessage, or still called baseClass::PreTranslate()? Sounds to me you are still calling view baseclass with PreTranslate.
Brian
|
|
|
|
|
My understanding was to implement this way, and it would "short-cicuit" normal VK_TAB behaviour. Did I screw it up?
BOOL CQS1EditView::PreTranslateMessage(MSG* pMsg) <br />
{<br />
if ((pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_TAB)) <br />
{ <br />
.... do stuff <br />
}<br />
else<br />
return CEditView::PreTranslateMessage(pMsg);<br />
}<br />
BW
"We get general information and specific information, but none of the specific information talks about time, place or methods or means..."
- Tom Ridge - US Secretary of Homeland Security
|
|
|
|
|
Return TRUE from PreTranslateMessage if you don't want the message to be dispatched. If you are already doing this in your ".... do stuff" section, I'm not sure what the problem is.
Chris Richardson
C/C++ Include Finder[^]
|
|
|
|
|
Chris Richardson wrote:
Return TRUE
hehe, oops. Thanks Chris
BW
"We get general information and specific information, but none of the specific information talks about time, place or methods or means..."
- Tom Ridge - US Secretary of Homeland Security
|
|
|
|
|
|
Hi,
in a SDI application I want to reload a document that was modified with CDosument::SetModified (TRUE) by clicking on the document in the MRU list. But the framework will recognize the document as already beeing loaded and only activates it as current active document again. There seems to be also no simple method to override to allow such a behavoir.
Two functions are involved in this:
CDocManager::OpenDocumentFile and CDocTemplate::MatchDocType
Both are virtual but both are also non trivial.
This function does not belong into the CDocTemplate, since I would like to have it for all Documents in a MDI Application. But this function isn't trivial at all.
Finally I have CWinApp::OnOpenRecentFile. But this isn't a real option also.
Is there any simple way to do this?
Thanks
Dirk
|
|
|
|
|
I took a look at your problem, and it seems like there's no simple way to do this. You need to derive from the DocManager class being used -- it's probably CFileDialogDocManager but look in your InitInstanstance for the exact name. Then you can override the OpenDocumentFile and pretty much copy the whole thing from the base class, except the part that checks the file's name. Well, you actually do want to check the file name so you can close the existing document.
It's not bad, just not very pretty. BTW, don't forget to change InitInstance.
Regards,
Alvaro
There are no stupid questions, but there are a lot of inquisitive idiots. -- despair.com
|
|
|
|
|
Thanks Alvaro,
I hoped there was a simpler solution. Perhaps only setting a flag or something
I realized it now, not overriding the OpenDocumentFile member function, but the MatchDocType function. This results in a much cleaner solution, since I don't have to copy code from the CSingleDocTemplate implementation
class CSingleReloadDocTemplate : public CSingleDocTemplate
{
DECLARE_DYNAMIC(CSingleReloadDocTemplate)
public:
CSingleReloadDocTemplate(UINT nIDResource, CRuntimeClass* pDocClass,
CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass)
: CSingleDocTemplate (nIDResource, pDocClass, pFrameClass, pViewClass)
{
}
virtual Confidence MatchDocType(LPCTSTR lpszPathName, CDocument*& rpDocMatch)
{
Confidence confidence = CSingleDocTemplate::MatchDocType (lpszPathName, rpDocMatch);
if (yesAlreadyOpen == confidence && rpDocMatch->IsModified())
{
int answer = AfxMessageBox ("Do you want to reload the document", MB_YESNO);
if (answer == IDYES)
{
// set the document modification state to "not modified" so the document template
// will not complain during OpenDocumentFile ()
rpDocMatch->SetModifiedFlag(FALSE);
// tell the DocumentManager, that no document with this title is already opened
rpDocMatch = NULL;
confidence = yesAttemptNative;
}
}
return confidence;
}
};
IMPLEMENT_DYNAMIC (CSingleReloadDocTemplate, CSingleDocTemplate);
For a MultiDocTemplate one should perhaps close the found document in some way (perhaps via CDocument::OnCloseDocument) since the CMultiDocTemplate::OpenDocumentFile() function will not reuse an existing open document like the CSingleDocTemplate. I'm not sure wether there is a combined method for this task that can be used for a SingleDocTemplate and a MultiDocTemplate (perhaps one can use CDocument::OnCloseDocument() already)
Regards,
Dirk
|
|
|
|
|
I think I'm not doing it right:
typedef struct{
CTrio * pCTrio;
int indexOfParentDisplay; } TrioIndexStruct;
std::set<TrioIndexStruct*>::iterator trioIt = m_pTrioSet.begin();
for(; trioIt != m_pTrioSet.end(); trioIt++)
{
(*trioIt)->pCTrio->ShowWindow(SW_HIDE);
}
and I'm getting a crash at the SW_HIDE:
BOOL CWnd::ShowWindow(int nCmdShow)
{
ASSERT(::IsWindow(m_hWnd));
if (m_pCtrlSite == NULL)
return ::ShowWindow(m_hWnd, nCmdShow);
else
<code>return m_pCtrlSite->ShowWindow(nCmdShow); </code>
}
m_pCtrlSite isnt null.
Appreciate your help,
ns
|
|
|
|
|
More info is needed: How are you feeding m_pTrioSet ? What's the lifespan of the CTrio objects pointed to by those TrioIndexStruct s?
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
LRESULT CSTrainView::OnUDMShowPhoto(UINT index, UINT nDummy)
{
CString mineName;
CTrio* pCTrio = new CTrio;
if (pCTrio == NULL) return 1;
BOOL ret = pCTrio->Create(IDD_CTRIO, this, index);
if(!ret)
{
AfxMessageBox("Error creating photobox");
delete pCTrio;
return 1;
}
int tempIndex = m_imageIndexLo + index;
pCTrio->ShowWindow(SW_SHOW);
<code> TrioIndexStruct trioIndexStruct;</code>
trioIndexStruct.pCTrio = pCTrio;
trioIndexStruct.indexOfParentDisplay = index;
m_pTrioSet.insert(&trioIndexStruct);
PopulatePhotoDisplay(tempIndex, trioIndexStruct.pCTrio, &mineName );
pCTrio->SetPhotoCaption(mineName);
return 0;
}
The Struct is local, but since I'm inserting into a set, it makes a copy that doesnt go out of scope (this is what I gather).
Appreciate your help,
ns
|
|
|
|
|
The Struct is local, but since I'm inserting into a set, it makes a copy that doesnt go out of scope (this is what I gather).
No copy is made, here's the problem. Define m_pTrioSet as a std::set<trioIndexStruct> (no pointer), change everything accordingly and the thing should work.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|