标题
    
    
        [sdk/windows/ppc]edit 的颜色和 DWL_MSGRESULT
    
 
    
 	 
       
    
    clq
    
    
    
		
        浏览(0) + 
        2008-04-24 18:29:04 发表
        
编辑
         
        
        
        
        关键字: 
        
 
        
        
        
        
                
        [sdk/windows/ppc]edit 的颜色和 DWL_MSGRESULT 
ppc 下设置 edit 的颜色,还不太成功。真机上是不行的。
	case WM_CTLCOLOREDIT:
	if( lParam == (LPARAM)::GetDlgItem( hwndDlg,IDC_EDIT_TEXT) )
		{ 
			HDC hdc = (HDC )wParam ;
			 RECT rect;
			// GetClientRect(hwndDlg, &rect);
			
          //   ::SetBkColor( hdc,BLACK_PEN);
			// HBRUSH   brush = CreateSolidBrush(BKCOLOR );
           // FillRect(hdc,&rect,m_pThis->brush);
			// DeleteObject(brush);
			//::SetTextColor( hdc,RGB(255,0,0));
			SetBkMode( hdc, TRANSPARENT );
			SetBkColor( hdc,BKCOLOR);
			SetWindowLong (hwndDlg, DWL_MSGRESULT, (long)m_pThis->brush);
			
			//return ( INT_PTR )BLACK_PEN;
			//return ( INT_PTR )GetStockObject(NULL_BRUSH);
			return TRUE;
			}
	  
		break;
在 windows 下直接这样就行了的。
	//更改 memo 的颜色
	if (hwnd == dlg->m_memo_panel.handle)
	{
		if (message == WM_CTLCOLOREDIT)
		{
			//WM_CTLCOLOREDIT  
			HDC hdc = (HDC) wParam;   // handle of display context 
			HANDLE handle = (HWND) lParam; // handle of static control 
			//有文字部分的背景颜色
			SetBkColor(hdc, RGB(255, 0, 0));//注意 hdc 是从消息中的参数得到的,不能用 GetDC() 从窗口句柄中得到,这样做的原因可能是它内部用双缓冲实现,是先到内存图的,不管怎样不是直接用窗口的画布
			SetTextColor(hdc, RGB(255, 255, 0));//字体颜色
			
			//SetPen(BLACK_PEN);
			//SetBkMode(GetDC(hwnd), TRANSPARENT);
			//没有文字部分的背景颜色
			HBRUSH hbr = (HBRUSH)GetStockObject(BLACK_BRUSH);
			(* pHook) = true;
			return (LRESULT)hbr;
			//return 1;
		}
        
        
        
        		
		        
                
                
     
    
 
	
	
     
    
       
    
    clq
    
    
    
    
    
    		    
    
          
              
    	发表时间:2005-7-19 14:32:00    [回复]  [引用] 
5 楼  
问题终于搞定,修改的代码如下:
case WM_NOTIFY:
    lpnmh = (LPNMHDR)lParam;
    switch(lpnmh->code)
    {
        case UDN_DELTAPOS: 
        lpnmud = (LPNMUPDOWN)lParam;
        if(lpnmud->iPos+lpnmud->iDelta>= 20 )//不能改为lpnmud->iPos
        {
            SetWindowLong(hwnd,DWL_MSGRESULT,TRUE);//必须加这句
            return TRUE;
        }
        else
       {
           return FALSE;
       }
    }
    break;
经过这次我明白了在对话框中返回TRUE或FALSE只代表是否用户处理该消息,并不代表消息的返回值,对于有返回值的消息,要用函数SetWindowLong(hwnd,DWL_MSGRESULT,value);a其中value用来设置消息返回值。
    
    
     
 
	 
	
    NEWBT官方QQ群1: 276678893
    可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
    但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
    验证问题说明申请入群原因即可.