|
yeah thanx
|
|
|
|
|
Hi i want to crate a rectangle based on the font size, font style,and number of charactes.So How can i decide width and height of different font size,font style & number of characters.
|
|
|
|
|
You can get the font information from CWnd member GetFont(http://msdn.microsoft.com/en-us/library/cb4schcy(VS.80).aspx)
And GetLogFont of the CFont will help get the information about the font.
http://msdn.microsoft.com/en-us/library/zhcs623h(v=VS.71).aspx
Величие не Бога может быть недооценена.
|
|
|
|
|
This function could calculate the text dimensions :
void GetTextSize(CSize& cResultSize,
CDC* pcDC,
CFont* pcFont,
const CString& cszText)
{
if (pcDC && pcFont) {
CGdiObject* pcOldFont = pcDC->SelectObject(pcFont);
cResultSize = pcDC->GetTextExtent(cszText);
pcDC->SelectObject(pcOldFont);
}
}
virtual void BeHappy() = 0;
modified on Friday, April 2, 2010 2:12 AM
|
|
|
|
|
Please can you me an example.
|
|
|
|
|
It could be something like this :
void CYourView::OnDraw(CDC* pDC)
{
if (pDC) {
CString cszText(_T("Hello World !"));
CRect cTextRect(CPoint(100, 100),
pDC->GetTextExtent(cszText));
pDC->FillSolidRect(cTextRect, RGB(0, 200, 0));
pDC->DrawText(cszText, cTextRect, DT_LEFT | DT_TOP);
}
}
virtual void BeHappy() = 0;
|
|
|
|
|
actually i want create a Button based on fontsize fontstyle ,no of characters and font type.I dont know what actul text or characters. only i have a options like.
No of characters : 50
Font Size : 16
Font Style : Regular/Bold/Italic
Font Type : Times New Roman or Arial or Courier
How width and height can be decided for the above ? so i can create a Button by assigning width and height easily .
|
|
|
|
|
Try it :
#define GAP 20
CSize GetButtonDimensions(int iCharCount,
int iFontSize,
const CString& cszFontName)
{
CSize cResultSize(0, 0);
CFont cFont;
if (cFont.CreatePointFont(iFontSize * 10, cszFontname)) {
CDC cDC;
if (cDC.CreateCompatibleDC(NULL)) {
CGdiObject* pcOldFont = cDC.SelectObject(cFont);
TEXTMETRIC tm = {0};
cDC.GetTextMetrics(&tm);
cResultSize.cy = tm.tmHeight + 2 * GAP;
cResultSize.cx = tm.tmMaxCharWidth * iCharCount + 2 * GAP;
cDC.SelectObject(pcOldFont);
}
cFont.DeleteObject();
}
return cResultSize;
}
virtual void BeHappy() = 0;
|
|
|
|
|
i am getting error :
[CGdiObject* pcOldFont = cDC.SelectObject(cFont);]
'initializing' : cannot convert from 'HGDIOBJ' to 'CGdiObject *'
|
|
|
|
|
Sorry, ..cDC.SelectObject(&cFont);
virtual void BeHappy() = 0;
|
|
|
|
|
Thank You Eugen Podsypalnikov i got.
|
|
|
|
|
This capability was removed from Visual Studio starting with Visual Studio .NET 2003*.
Discussion on the msdn.com and microsoft.com web sites indicate that this feature
will not be implemented in future versions of Visual Studio.
You can create a .bat file or makefile based on the buildlog.html. A buildlog.html file is created after building a project. You can find the file under the $(output) directory.
I am not a genius, but shed more sweat!
|
|
|
|
|
Just wondering.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Hi
This is more of a code architecture question. I'll try my best to explain what I'm trying to do.
I need to create a function that have access to a secondary thread, process it, and returns back to the primary thread.
Let say class B has FunctionX.
bool B::FunctionX(LPCTSTR lpszValue, CString& strResponse)
{
}
Then, class CMyView will call FunctionX like so
void CMyView::Foo()
{
B myB;
CString str;
if(myB.FunctionX(TEXT("TestValue"), str)
{
AfxMessagebox(TEXT("Oh Yeah!"));
}
else
{
AfxMessageBox(TEXT("Boohooo!"));
}
}
|
|
|
|
|
So u mean you want to create a thread(Secondary) inside a thread(primary) and then do the secondary processing and then continue the primary.
Величие не Бога может быть недооценена.
|
|
|
|
|
I think you didn't really understand how threading works. You can't "call" a thread, a thread is running in parallel of your main thread and you cannot call it.
From your example, it looks like you want to do some processing, get the results of the processing when done and display that result, all of that WITHOUT freezing the UI (that's why you want a thread, right) ? Am I correct ?
If yes, then this is not the way to do it: in your Foo function, you are anyway waiting for the result of your thread (thus blocking the main thread), which means that the UI messages won't be processed anymore.
The best way to solve your problem is to start the thread (in your FunctionX for instance) and then post a user defined message containing the result to the UI. I suggest you read this very good article[^] for more information.
|
|
|
|
|
Thanks for the link. Helps a lot
|
|
|
|
|
Hi all,
i m trying to sending Long SMS by AT command in PDU mode.
<br />
<br />
Here is a complete set of AT commands to send a message consisting of 2 parts:<br />
<br />
Part::1<br />
AT+CMGS=153<br />
0041000A8199176862600000FFA0050003000201C139889C9E8FEBF379990C4ABB416137A81C96B3D3653908FE9ED359A0FCBB0E1A87DDA0F1DBED2E8FE920FA1B14061DA74D50FB4D2EB741613719549F9741412A68FC6EB7C36EF21C447F83E6653719346D4E41EDF27C1E3E97E72E10155D9697416179192403C1DFF3795ACC2E83DA653AFA4D9EEB40D4329E0E6ABFC96550D84D06418955<br />
<br />
Part::2<br />
AT+CMGS=32<br />
0041000A8199176862600000FF0E050003000202A0F69B5C0699DF72D0B4397501<br />
<br />
return AT+CMGS Error.
please help me .
thanks in advance
|
|
|
|
|
I have read through www.flounder.com Asynchronous Process Notification/Worker Thread and Arjay thread articles but I can't figure out how to get the two work together
From Asynchronous Process Notification, I understand to use Afxbeginthread to create a thread to wait for the process to end and post a message.
From Worker Thread and Arjay thread articles, I understand that I can use SuspendThread() and ResumeThread().
void CProcessManagerDlg::OnBnRun()
{
ptrThread = AfxBeginThread(WaitThread, this, THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
ptrThread->m_bAutoDelete = FALSE;
ptrThread->ResumeThread();
}
void CProcessManagerDlg::OnPause()
{
ptrThread->SuspendThread();
}
UINT WaitThread(void *pParam)
{
CProcessManagerDlg* pThis= (CProcessManagerDlg*)pParam;
HANDLE hProcess = Launch(_T("notepad"));
::WaitForSingleObject(hProcess, INFINITE);
pThis->PostMessage(UWM_DONE, 0, (LPARAM)hProcess);
}
Press Pause wouldn't do anything. I am guessing WaitForSingleObject is preventing the thread from receiving suspend or resume(which would explain why TerminateThread and PostMessage(WM_QUIT) do not work either). So how would I go about suspending a thread that needs to waitforsingleobject on external process?
|
|
|
|
|
Why do you need to suspend the thread if it's already waiting for the external process?
|
|
|
|
|
I want the ability to pause/resume the external process.
|
|
|
|
|
The thread that launches the process is not the thread inside that process. Each process has its own threads.
If you want to pause the external process, you'll need to use the information in this article:
http://msdn.microsoft.com/en-us/library/ms686701(VS.85).aspx[^]
Specifically, see Traversing the thread list .
|
|
|
|
|
Ah so I can't use the thread that spawn the process to pause it. This is going to be a lot more complicated
Thanks for the link I am looking into it. I don't suppose there is an article with demo on here or CodeGuru for me to fiddle with it.
|
|
|
|
|
There very well might be an article here.
The idea is that you enumerate all the processes until you find the one you just launched, then enumerate all the threads in the process and pause each one.
|
|
|
|
|
I forgot to mention that if you want to start the external process in a suspended state, you can call CreateProcess() with a special flag called CREATE_SUSPENDED, and the process will be loaded, but will not run until you resume each of its threads.
|
|
|
|