为什么返回值老是0?

gamezealot 2004-10-25 02:35:41
srand( (unsigned)time(NULL));
CRect rect;
int color[3];
color[0] = rand()%255;
color[1] = rand()%255;
color[2] = rand()%255;
CDC *pDC=copy.GetDC();
copy.GetClientRect(&rect);
pDC->SetTextColor(RGB(color[0],color[1],color[2]));
//这里,为什么SetTextColor老是返回一个0,应该返回一个RGB值啊,该怎么改?
copy.ValidateRect(&rect);
copy.ReleaseDC(pDC);
...全文
325 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjz800800 2004-10-26
  • 打赏
  • 举报
回复
你把你的代码全部帖出来就知道你错在那里了,你上面的代码不可能返回0;
你的pDC->SetTextColor(...)返回的只是的设置文本的颜色
gamezealot 2004-10-26
  • 打赏
  • 举报
回复
//调试过程:
在SetTextColor(...);处F9,然后debug程序,程序停止在SetTextColor(...)处,看了下
color[0] = 46; color[1] = 36; color[2] = 55;
然后F11,进入Settextcolor函数,看到下面的代码:
然后一步一步F11,得到的数据给大家看下:
COLORREF CDC::SetTextColor(COLORREF crColor)//这里叫做 1吧
{
ASSERT(m_hDC != NULL);// 2
COLORREF crRetVal = CLR_INVALID; //3

if (m_hDC != m_hAttribDC)//4
crRetVal = ::SetTextColor(m_hDC, crColor);//5
if (m_hAttribDC != NULL)//6
crRetVal = ::SetTextColor(m_hAttribDC, crColor);//7
return crRetVal;//8
}
1. crColor = 3613742;
2. m_hDC = unused;
3. crRetVal = 1244820;执行后 crRetVal = 4294967295;
4. m_hAttribDC = unused;
5. not change
6. m_hAttribDC = unused;
7. crRetVal = 0;//here return 0??????????
8. return 0;

怎么回事呢?
gamezealot 2004-10-26
  • 打赏
  • 举报
回复
呵呵,谢谢大家参与,不过我已经用另外一种方法解决了,散分了^_^
fbmsf 2004-10-26
  • 打赏
  • 举报
回复
用 GetLastError.看错误代码。
fbmsf 2004-10-26
  • 打赏
  • 举报
回复
m_hAttribDC为什么是Unused,应该是个有效的直呀。
gamezealot 2004-10-26
  • 打赏
  • 举报
回复
全部的代码是不可能的,就只是OnInitDialog()吧~
BOOL CMyPlanDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}/**/

// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here
//read setting info from regedit
GetDlgItem(IDC_STATUS)->SetWindowText("»¹Î´É趨£¬µÈ´ýÖÐ...");
cfFileName = "config.ini";
char strbuf[256];
CTimeSettings dlg;
//¼ÓÔØ×¢²á±íÖеÄʱ¼äµÄĬÈÏÏî
GetPrivateProfileString("ʱ¼äÐÅÏ¢","Ò»½×¶Î¿ªÊ¼","12",strbuf,128,cfFileName);
res1 = atoi(strbuf)+8;
GetPrivateProfileString("ʱ¼äÐÅÏ¢","Ò»½×¶Î½áÊø","13",strbuf,128,cfFileName);
res2 = atoi(strbuf)+8;
/////////////////////////////
GetPrivateProfileString("ÅäÖÃÐÅÏ¢", "µÚÒ»½×¶Î",
"C:\\Program Files\\Microsoft Visual Studio\\Common\\MSDev98\\Bin\\MSDEV.EXE",
strbuf, 128, cfFileName);
PostMessage(WM_SENDSTRING,(WPARAM)strbuf,1);
//¸ñʽ»¯111111
path1.Format("%s",strbuf);

//load default time setting
GetPrivateProfileString("ʱ¼äÐÅÏ¢","¶þ½×¶Î¿ªÊ¼","13",strbuf,128,cfFileName);
res3 = atoi(strbuf)+8;
GetPrivateProfileString("ʱ¼äÐÅÏ¢","¶þ½×¶Î½áÊø","14",strbuf,128,cfFileName);
res4 = atoi(strbuf)+8;
//////////////////////////
GetPrivateProfileString("ÅäÖÃÐÅÏ¢", "µÚ¶þ½×¶Î",
"C:\\Program Files\\MSN Messenger\\msnmsgr.exe",strbuf, 128, cfFileName);
PostMessage(WM_SENDSTRING,(WPARAM)strbuf,2);
//¸ñʽ»¯2222222
path2.Format("%s",strbuf);

//¼ÓÔØĬÈÏʱ¼äÅäÖÃ~
GetPrivateProfileString("ʱ¼äÐÅÏ¢","Èý½×¶Î¿ªÊ¼","14",strbuf,128,cfFileName);
res5 = atoi(strbuf)+8;
GetPrivateProfileString("ʱ¼äÐÅÏ¢","ÈÎÎñ½áÊø","15",strbuf,128,cfFileName);
res6 = atoi(strbuf)+8;
/////////////////////////////////
GetPrivateProfileString("ÅäÖÃÐÅÏ¢", "µÚÈý½×¶Î",
"E:\\½ðɽ´Ê°Ô2003\\XDICT.EXE",strbuf, 128, cfFileName);
PostMessage(WM_SENDSTRING,(WPARAM)strbuf,3);
//¸ñʽ»¯3333
path3.Format("%s",strbuf);

//set timer
SetTimer(1,1000,NULL);//Ò»°ãµÄ¼ÇʱÆ÷
SetTimer(20,1000,NULL);//°æȨµÄÉ«²Ê±ä»»¼ÇʱÆ÷
//TRayICon code here
NOTIFYICONDATA tnd;
tnd.cbSize = sizeof(NOTIFYICONDATA);
tnd.hWnd = this->m_hWnd;
tnd.uID = IDR_MAINFRAME;
tnd.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
tnd.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
tnd.uCallbackMessage = WM_NOTIFYMSG;
strcpy(tnd.szTip,"ìÅÔƹ¤×÷ÊÒ--ʱ¼ä¼Æ»®°ïÊÖ");
Shell_NotifyIcon(NIM_ADD, &tnd);
PostMessage(WM_HIDEMAIN, 0, 0);
//³õʼ»¯µ¹¼Çʱ²»¿É¼û
GetDlgItem(IDC_REMAIN)->ShowWindow(SW_HIDE);
///////////////////////////////////////////////////////////////////////////
srand( (unsigned)time(NULL));//±ØÐëºÍrandÅäºÏʹÓÃ
CRect rect;
int color[3];
color[0] = rand()%255;
color[1] = rand()%255;
color[2] = rand()%255;
CDC *pDC=copy.GetDC();
copy.GetClientRect(&rect);
pDC->SetTextColor(RGB(color[0],color[1],color[2]));
copy.ValidateRect(&rect);
copy.ReleaseDC(pDC);
return TRUE; // return TRUE unless you set the focus to a control
}
其他的和这个没关系了~
gamezealot 2004-10-25
  • 打赏
  • 举报
回复
不是啊,我的意思是说执行后每次都可以得到正确的随机数,可是偏偏到SetTextColor(...)这个函数就返回了0,我跟踪了代码,发现有段代码是什么,哎,具体忘了,现在在网吧,郁闷,明天到公司贴吧,反正就是说很奇怪,SetTextColor(...)函数不应该返回的是0啊,可我调试了n次,得到的RGB的三个值是不听的变化的,可返回老是0,我晕啊~~,怎么回事,各位大虾,帮忙给看下哦~~
roscoe 2004-10-25
  • 打赏
  • 举报
回复
是你种子的问题,应该把srand放在构造|初始化中,只执行一次就可以.
gamezealot 2004-10-25
  • 打赏
  • 举报
回复
奇怪,为什么我的调试下来总是:
color[0] | 32
color[1] | 45
color[2] | 148
pDC->SetTextColor(...) return | 0
怎么回事呢?
yuantao 2004-10-25
  • 打赏
  • 举报
回复
楼上的说的对, 我以前也碰到过这种问题.
zjz800800 2004-10-25
  • 打赏
  • 举报
回复
是呀,当然是黑色,但是也不至于是0,而是RGB(0,0,0);
返回:pDC->SetTextColor=0x5f494c94 CTempDCGetRunTimeClass(viod)
一条晚起的虫 2004-10-25
  • 打赏
  • 举报
回复
返回的是以前的Text 的RGB值,默认是黑色,如果你没有改过的话,返回的当然是0了,那时黑色的COLORREF;呵呵
zjz800800 2004-10-25
  • 打赏
  • 举报
回复
你上面的代码调试下来不是0呀
pDC->SetTextColor(RGB(color[0],color[1],color[2]));
gamezealot 2004-10-25
  • 打赏
  • 举报
回复
忘说了,copy是文本控件对应的变量(CStatic copy;)
拜托大家 给看下~

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧