zoukankan      html  css  js  c++  java
  • windows开发中的一点总结

    工作大半年了,MFC开发中遇到的一些问题和总结~~~

     1 /*********************************************************/
     2 【vector<UrlPort> 3 【PreTranslateMessage】
     4 【MyDrawText】
     5 【按钮图片替换】
     6 【client or screen 高度/宽度】
     7 【浏览框 设计】/【选择路径】/【选择文件弹出框】
     8 【CString字符/字符串 替换】
     9 【MyDrawText】
    10 【CPaintDC】
    11 【快速在另一个工程中添加已经有的对话框资源】
    12 【CString 和 char* 等之间的转换】
    13 【“超链接”到某网址】
    14 【判断某点是否在某rect内】
    15 【这三句和下面这一句必加,否则Png图片不能读取】
    16 【去掉标题栏】
    17 //-----------------------------------------------------------------
    18 【IPCClient点登录后,再点其它窗口,最终导致程序主界面】
    19 【0407SY_PC     m_min.SetButtonImage(pBuffer); 中断】
    20 【获取控件rect】
    21 【画矩形。。。】
    22static/label控件背景透明】
    23 【release, debug下通用的scopy】
    24 【BitBlt(原图大小), StretchBlt(缩放)】
    25 【exe位置 GetModulePath】
    26 【CFileDialog,  BROWSEINFO 会改变程序运行path, 从而可能导致异常】
    27 【按行读取文件MFC】
    28 【ListBox_Draw】
    29 
    30 /*********************************************************/
      1 【一】
      2 类中:
      3   static vector<UrlPort> vup;
      4 类外:
      5   vector<UrlPort> CDVRClientMainDlg::vup;
      6 ---------------------------------------------- ----------------------------------------------
      7 char *filename=_T("login\\login.png");
      8     size_t len=strlen(filename);
      9     size_t converted=0;
     10     wchar_t *pBuffer;
     11     len=len+1;
     12     pBuffer=(wchar_t *)malloc(len*sizeof(wchar_t));
     13     mbstowcs_s(&converted,pBuffer,len,filename,_TRUNCATE);
     14     m_btnlogin.SetButtonImage(pBuffer);
     15 ------------------------------------ --------------------
     16 
     17 【一】布局控件
     18     Button16
     19 CWnd * pWnd  = NULL;
     20     rtBtce.left = 5;
     21     rtBtce.top = 600;
     22     rtBtce.right = rtBtce.left + 130;
     23     rtBtce.bottom = rtBtce.top + 23;
     24 ---------------------------------- - 此处只负责布局,不负责效果-------------------------------------
     25     rtBtbgn.left = 45;
     26     rtBtbgn.top = 125;
     27     rtBtbgn.right = rtBtbgn.left + 60;
     28     rtBtbgn.bottom = rtBtbgn.top + 23;
     29     pWnd = GetDlgItem(IDC_BUTTON_BEGIN);
     30     if(pWnd && IsWindow(pWnd->m_hWnd))
     31     {
     32         pWnd->MoveWindow(rtBtbgn);
     33     }
     34   。。。。。。。。。。。。。。。。。。 
     35 //static-all
     36     rtallStatic.right = rectList.right - 125;
     37     rtallStatic.left = rtallStatic.right - 40;
     38     rtallStatic.top = rectList.bottom - 40;
     39     rtallStatic.bottom = rtallStatic.top + 40;
     40   m_stcAll.MoveWindow(rtallStatic);
     41   
     42 ------------------------------------------------------------ ----------------------------------------------
     43 本类中的成员变量(一般static)在其它cpp中改变,将.h文件加载过去,然后
     44 CmyClass::varible=xx; 即可
     451220》--------------------------负责效果
     46   m_sliderBr.SetBitmapChannel( IDB_VERTICAL_NORMAL,IDB_VERTICAL_ACTIVE );
     47     m_sliderBr.SetBitmapThumb( IDB_BITMAP_VER_CE2, IDB_BITMAP_VER_CE1, TRUE );
     48     m_sliderBr.DrawFocusRect(FALSE);
     49 
     50     m_sliderBr.SetRange(0,10);
     51     m_sliderBr.SetPos( 5 );
     52 
     53     //前两个int—滑块相应效果
     54     //后两个int—channel相应效果
     55     m_sliderBr.SetMargin( 0, 0, 2, 2 );//hong_1218--小滑块
     56     m_sliderBr.SetVertical();//垂直滑动效果
     57 = ============================================
     58 int nWScreen = GetSystemMetrics(SM_CXSCREEN);   
     59         int nHScreen = GetSystemMetrics(SM_CYSCREEN);
     60         CRect rect;
     61         rect.right=nWScreen-10;
     62         rect.left=rect.right-250;
     63         rect.top=0;
     64         rect.bottom=nHScreen-100;
     65         m_list.MoveWindow(rect);//列表
     66 【《1223》】
     67   对话框不能截获响应OnLButtonDown时,在PreTranslateMessage下处理
     68   POINT p1;
     69   GetCursorPos(&p1);
     70   ScreenToClient(&p1);
     71   
     72   CRECT m_pRectLink;
     73   GetDlgItem(IDC_s)->GetWindowRect(&m_pRectLink); 
     74   ScreenToClient(&m_pRectLink);
     75 
     76 
     77 
     78 //**********************************************************//
     79 没映射ON_WM_LBUTTON()的情况下:
     80 BOOL CLoginDlg::PreTranslateMessage(MSG* pMsg)
     81 {
     82 /*    if(pMsg->message==WM_LBUTTONDOWN)  
     83     { 
     84         GetCursorPos(&p1);
     85         ScreenToClient(&p1);
     86         //在这里添加单击按下事件的程序
     87         if((p1.x > m_pRectLink.left) && (p1.x < m_pRectLink.right)
     88             && (p1.y > m_pRectLink.top) && (p1.y < m_pRectLink.bottom))
     89         {
     90             ShellExecute(NULL, NULL, _T("http://www.baidu.com"), NULL,NULL, SW_SHOWNORMAL);
     91         }
     92     }
     93 */
     94     return CDialog::PreTranslateMessage(pMsg);
     95 }
     96 ------------------------------------------------------------------------------------ ----------------------------
     97 
     98 
     99 
    100 
    101 
    102 
    103 有映射ON_WM_LBUTTONDOWN()的情况下:
    104 void CLoginDlg::OnLButtonDown(UINT nFlags, CPoint point)
    105 {
    106     // TODO: 在此添加消息处理程序代码和/或调用默认值
    107     .............................
    108   ..............................
    109     //_1223
    110     if((point.x > m_pRectLink.left) && (point.x < m_pRectLink.right)
    111         && (point.y > m_pRectLink.top) && (point.y < m_pRectLink.bottom))
    112     {
    113         ShellExecute(NULL,NULL,_T("http://www.baidu.com"),NULL,NULL, SW_SHOWNORMAL);
    114     }    
    115     CDialog::OnLButtonDown(nFlags, point);
    116 }
    117 //**********************************************************//
    118 void CLoginDlg::OnMouseMove(UINT nFlags, CPoint point)//_1223光标资源设置
    119 {
    120     // TODO: 在此添加消息处理程序代码和/或调用默认值
    121     if((point.x > m_pRectLink.left) && (point.x < m_pRectLink.right)
    122         && (point.y > m_pRectLink.top) && (point.y < m_pRectLink.bottom))
    123     {
    124         HCURSOR hCursor;
    125         hCursor = AfxGetApp()->LoadCursor(IDC_CURSOR2);
    126         SetCursor(hCursor);
    127     }
    128     CDialog::OnMouseMove(nFlags, point);
    129 }
    130 
    131 【《1224》】
    132 【一、】
    133 void CLoginDlg::MyDrawText(COLORREF color)
    134 {
    135 /*    //绘入静态文本框文字_1224
    136     CWnd* pWnd_k = GetDlgItem(IDC_s); //_1224
    137     CDC* pDC_k = pWnd_k->GetDC();
    138     pDC_k->SetTextColor(RGB(0,0,0));
    139     CRect rt ;
    140     pWnd_k->GetClientRect(rt);
    141     pDC_k->DrawText("快速注册",rt,0);
    142     ReleaseDC(pDC_k);
    143 */
    144 
    145     CRect rt ;
    146     CWnd* pWnd = GetDlgItem(IDC_s); //_1224
    147           pWnd->GetClientRect(rt);
    148     CDC* pDC = pWnd->GetDC();
    149     ASSERT_VALID(pDC);
    150     CFont font;
    151     font.CreateFont(14,0,0,0,150,FALSE,FALSE,0,ANSI_CHARSET,
    152         OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH&FF_SWISS,"Aerial");
    153     pDC->SelectObject(&font);
    154 
    155     pDC->SetTextColor(color);
    156     pDC->SetBkMode(TRANSPARENT);//文字背景“透明”
    157     pDC->DrawText("快速注册",rt,0);
    158     ReleaseDC(pDC);
    159 }
    160 【二、】
    161 void CTopLeftDlg::MyDrawText(COLORREF color, CString str, CRect rt, int nSize)
    162 {
    163 
    164     //创建字体
    165     CDC* pDC = GetDC();
    166     CFont font;
    167     font.CreateFont(nSize,0,0,0,150,FALSE,FALSE,0,ANSI_CHARSET,
    168         OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
    169         DEFAULT_PITCH&FF_SWISS,"Aerial");
    170     pDC->SelectObject(&font);
    171 
    172     //drawtext
    173     pDC->SetTextColor(color);
    174     pDC->SetBkMode(TRANSPARENT);//文字背景“透明”
    175     pDC->DrawText(str , &rt, DT_CENTER | DT_VCENTER);
    176 
    177     pDC->SelectObject(&font);
    178     font.DeleteObject();
    179     ReleaseDC(pDC);
    180 }
    181 
    182 【按钮图片替换】
    183 filename=_T("login\\server.png");
    184     len=strlen(filename);
    185     converted=0;
    186     len=len+1;
    187     pBuffer=(wchar_t *)malloc(len*sizeof(wchar_t));
    188     mbstowcs_s(&converted,pBuffer,len,filename,_TRUNCATE);
    189     m_btntempsetwireless.SetButtonImage(pBuffer);
    190 注意按钮属性,设置OverDraw为TRUE
    191 
    192 
    193 /*****************************************************************************/
    194 /**********************        【总结】         ******************************/
    195 /*****************************************************************************/
    196 【一】,底部scrollbtToolBar显示有余留的问题
    197   :ResizeControlsPos(void)中处理SW_HIDE、SW_SHOW。
    198   如:
    199   pWnd = GetDlgItem(IDC_BT_SHOWHIDE_LEFTFRAME);
    200     if(pWnd && IsWindow(pWnd->m_hWnd))
    201     {
    202         pWnd->MoveWindow(rtShowHideLeftFrame);
    203         pWnd->ShowWindow(SW_HIDE);//_1224
    204   //不加第二句则有,显示余留
    205   }
    206 【二】主窗口的wndpross()可以拦截WM_CLOSE消息,这样消息映射就不会有响应。
    207 
    208 【三】优化时注意消息的响应是否正常,如从外界引用的控件类
    209 
    210 
    211 【CString to string212 char *p = strusername.GetBuffer(strusername.GetLength());
    213     string str(p);
    214     strusername.ReleaseBuffer();
    215 
    216 【CMenu/217 //响应右键点击,产生右键菜单的删除文件选项
    218 void CSystemInfoDlg::OnNMRclickList2(NMHDR *pNMHDR, LRESULT *pResult)
    219 {
    220     //AfxMessageBox("右键菜单L02!");
    221         //ScreenToClient(&pt);
    222     //ClientToScreen(&pt);
    223 
    224     CPoint pt;
    225     GetCursorPos(&pt);
    226 
    227     CMenu menu;
    228     menu.CreatePopupMenu();
    229     menu.AppendMenu(0,ID_PIC,"删除文件");//ID_PIC,resource.h中定义
    230     
    231     menu.TrackPopupMenu(TPM_RIGHTBUTTON,pt.x,pt.y,this);
    232 
    233 }
    234 
    235 //响应右键菜单-删除文件PreTranslateMessage()
    236 void CSystemInfoDlg::DeletePic()
    237 {
    238 //    AfxMessageBox("删除图片!");
    239 // CListCtrl m_list;
    240     POSITION pos = m_list.GetFirstSelectedItemPosition();
    241     int nItem = m_list.GetNextSelectedItem(pos);
    242     CString picfullname = m_list.GetItemText(nItem,1);
    243     
    244 //    m_list.DeleteItem(nItem); 
    245     DeleteFile(picfullname);
    246 
    247     //保证右边序号一起变化
    248     m_list.DeleteAllItems();
    249     OnBnClickedPlFind();
    250 }
    251 
    252 【client or screen 高度/宽度】
    253 //     int nWScreen = GetSystemMetrics(SM_CXSCREEN);   
    254 //     int nHScreen = GetSystemMetrics(SM_CYSCREEN);
    255     CRect rectList;
    256     GetClientRect(rectList);
    257 
    258 【浏览框 设计】
    259         BROWSEINFO bi;
    260     char dispname[100],path[100];
    261     ITEMIDLIST *pidl;
    262     
    263     bi.hwndOwner =GetSafeHwnd();
    264     bi.pidlRoot =0;
    265     
    266     bi.pszDisplayName =dispname;
    267     bi.lpszTitle ="选择文件夹";
    268 //    bi.ulFlags =BIF_RETURNONLYFSDIRS;
    269     bi.ulFlags =BIF_NEWDIALOGSTYLE;
    270     bi.lpfn =0;
    271     bi.lParam =0;
    272     bi.iImage =0;
    273     
    274     
    275     if(pidl=SHBrowseForFolder(&bi))
    276     {
    277         if(SHGetPathFromIDList(pidl,path)==true)
    278         {
    279            GetDlgItem(IDC_CPATH)->SetWindowText(path);
    280         }
    281     }
    282 
    283 
    284 【CString字符/字符串 替换】
    285 CString CPageDvrViewDlg::ReplaceChar(CString& strContent,CString strSrc,CString strDest)
    286 {
    287     CString strReturn;
    288     int nBeginPos = 0;
    289     int nEndPos   = 1;
    290     while(nEndPos >= 0)
    291     {
    292         nEndPos = strContent.Find(strSrc,nBeginPos);
    293         if(nEndPos < 0) break;
    294         strReturn += strContent.Mid(nBeginPos,nEndPos - nBeginPos);
    295         strReturn += strDest;
    296         nBeginPos = nEndPos + strSrc.GetLength();
    297     }
    298     strReturn += strContent.Right(strContent.GetLength() - nBeginPos);
    299     return strReturn;
    300 }
    301 
    302 【MyDrawText】
    303 void CLoginDlg::MyDrawText(COLORREF color)
    304 {
    305     CRect rt ;
    306     CWnd* pWnd = GetDlgItem(IDC_STATIC7); //_1226
    307     pWnd->GetClientRect(rt);//获得drawtext目标区域
    308 
    309     //创建字体
    310     CDC* pDC = pWnd->GetDC();
    311     CFont font;
    312     font.CreateFont(16,0,0,0,150,FALSE,FALSE,0,ANSI_CHARSET,
    313         OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH&FF_SWISS,"Aerial");
    314     pDC->SelectObject(&font);
    315 
    316     //drawtext
    317     pDC->SetTextColor(color);
    318     pDC->SetBkMode(TRANSPARENT);//文字背景“透明”
    319     //pDC->DrawText("注册",rt,0);
    320     pDC->DrawText("注    册",rt,0);
    321     ReleaseDC(pDC);
    322 }
    323 void CMailRightDlg::MyDrawText(COLORREF color, CString str, CRect rt, int nSize, int nWeight)
    324 {
    325 
    326     //创建字体
    327     CDC* pDC = GetDC();
    328     CFont font;
    329     font.CreateFont(nSize,0,0,0,nWeight,FALSE,FALSE,0,ANSI_CHARSET,
    330         OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
    331         DEFAULT_PITCH&FF_SWISS,_T("宋体"));//Aerial, 宋体
    332     pDC->SelectObject(&font);
    333 
    334     //drawtext
    335     pDC->SetTextColor(color);
    336     pDC->SetBkMode(TRANSPARENT);//文字背景“透明”
    337     pDC->DrawText(str , &rt, DT_LEFT | DT_VCENTER);
    338 
    339     pDC->SelectObject(&font);
    340     font.DeleteObject();
    341     ReleaseDC(pDC);
    342 }
    343 
    344 
    345 【CPaintDC】
    346 //画竖条,看不到,则已被嵌入的框框挡住
    347   CPaintDC dc(this);
    348     CRect rt1,rt2;
    349     GetClientRect(&rt1);
    350     rt2 = rt1;
    351     rt1.top += 64;
    352      rt1.bottom -= 32;
    353      rt1.left = 253;
    354      rt1.right = rt1.left + 17;
    355     dc.FillSolidRect(rt1,RGB(158,218,239));
    356 
    357 
    358 【选择路径弹出框】
    359 void CSetPathDlg::OnBnClickedBtnBrow2()
    360 {
    361     // TODO: 在此添加控件通知处理程序代码
    362     BROWSEINFO bi;
    363     char dispname[100],path[100];
    364     ITEMIDLIST *pidl;
    365 
    366     bi.hwndOwner =GetSafeHwnd();
    367     bi.pidlRoot =0;
    368 
    369     bi.pszDisplayName =dispname;
    370     bi.lpszTitle ="选择文件夹";
    371     //    bi.ulFlags =BIF_RETURNONLYFSDIRS;
    372     bi.ulFlags =BIF_NEWDIALOGSTYLE;
    373     bi.lpfn =0;
    374     bi.lParam =0;
    375     bi.iImage =0;
    376 
    377     if(pidl=SHBrowseForFolder(&bi))
    378     {
    379         if(SHGetPathFromIDList(pidl,path)==true)
    380         {
    381             GetDlgItem(IDC_EDT_SET_PATH2)->SetWindowText(path);
    382         }
    383     }
    384 }
    385 
    386 【选择文件弹出框】
    387 void CAlarmInfoDlg::OnBnClickedButtonBrow()
    388 {
    389     // TODO: 在此添加控件通知处理程序代码    
    390 
    391     CFileDialog mFileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
    392         "文件类型(*.pk2)||", NULL/*AfxGetMainWnd()*/);
    393 
    394     if(mFileDlg.DoModal()==IDOK)
    395     {    
    396         m_sPk2 = mFileDlg.GetFileExt();
    397         if ( !strcmp(m_sPk2,"pk2"))
    398         {
    399             m_myPathName=mFileDlg.GetPathName();
    400             m_myFileName=mFileDlg.GetFileName();
    401         }
    402         else
    403         {
    404             MessageBox("请选择pk2类型文件!");
    405             return;
    406         }        
    407     }
    408 
    409 二、保存文件
    410 同上,只不过将CFileDialog hFileDlg(true,NULL 改为 CFileDialog hFileDlg(false,NULL,
    411 文件类型说明和扩展名间用 | 分隔,可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。
    412 CFileDialog mFileDlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
    413     "Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||", NULL);
    414 CFileDialog mFileDlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
    415     "文件类型(*.xsf)|*.xsf|文件类型(*.txt)|*.txt||", NULL);
    416 //GetDlgItem(IDC_EDT_SETSYSTEM_LAN) -> SetWindowText(pathName);
    417 //m_edtLang.SetWindowText(pathName);
    418     UpdateData(false);
    419 }
    420 
    421 【保存文件弹出框】:
    422 void CChooseIpc::OnBnClickedChooseipcDc1()
    423 {
    424     // TODO: 在此添加控件通知处理程序代码
    425     CString    str01, str02;
    426     CFileDialog mFileDlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
    427     "文件类型(*.txt)|*.txt||", NULL);
    428 
    429     if(mFileDlg.DoModal()==IDOK)
    430     {    
    431         str01 = mFileDlg.GetPathName();
    432         str02 = mFileDlg.GetFileExt();
    433         if (str02 != "txt")
    434             str01 += _T(".txt");
    435     }
    436 
    437     //---------------------------------------------
    438     CString    str1;
    439      CFile file;
    440      BOOL bl = file.Open (str01,CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate,NULL);
    441     if (bl)
    442     {
    443         int nCount = m_list.GetCount();
    444         for (int i=0; i<nCount; ++i)
    445         {
    446             m_list.GetText(i, str1);
    447             str1 = str1 + CString("
    ");
    448             file.Write(str1,str1.GetLength());
    449         }
    450 
    451         file.Close();
    452     }
    453     else
    454     {
    455         AfxMessageBox(_T("数据导出失败!"));
    456     }
    457 }
    458 
    459 【快速在另一个工程中添加已经有的对话框资源】
    460 1,在源工程的.rc文件中,将Dialog部分的代码复制到新工程的.rc文件中;类似的如果有用到原资源中相同的资源(如IDB,ICON......等),也将其代码复制到新工程的rc中。
    461 
    462 2,将所有对话框中所用到的控件或者其它资源的ID定义从原resource.h复制到新工程的resource.h中。
    463   PS: 一般在同一时间段创建的框框,控件等的ID 均是分类(区域),挨在一直起的。
    464   
    465 3,把相应的对话框的.h/.cpp文件复制到新工程中,只要在新工程用到的地方作好与原工程相同的变量等添加设置即可。
    466 
    467 Q1: 出现无法解析外部连接的情况,一般是.h/.cpp文件没有添加, 或者.rc文件中的问题。
    468 
    469 
    470 【CString 和 char* 等之间的转换】
    471 CString 转 char * CString strtest="wwwwttttttt"; charpoint=strtest.GetBuffer(strtest.GetLength()); 
    472 -------------- ---------------------------------------------------------------- 
    473 CString mac;
    474 (LPSTR)(LPCTSTR)mac;
    475 
    476 
    477 
    478 【“超链接”到某网址】
    479 ShellExecute(NULL, NULL, _T("http://113.106.88.132:8080/register.jsp"), NULL,NULL, SW_SHOWNORMAL);
    480 
    481 【判断某点是否在某rect内】
    482 m_rectPic.PtInRect(point)
    483 
    484 【这三句和下面这一句必加,否则Png图片不能读取】
    485 /*
    486     这三句和下面这一句必加,否则Png图片不能读取
    487     GdiplusShutdown(gdiplusToken)
    488     */
    489     GdiplusStartupInput gdiplusStartupInput;  
    490     ULONG_PTR gdiplusToken;  
    491     GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
    492 
    493 【去掉标题栏】
    494 CIPCClientDlg * pMWnd = (CIPCClientDlg *)::AfxGetMainWnd();
    495 
    496     if (pMWnd==NULL)
    497     {
    498         return;
    499     }
    500     
    501     //--
    502     pMWnd->ShowWindow(SW_HIDE);
    503     pMWnd->ModifyStyle(WS_CAPTION,0,0); //去掉标题栏。
    504 
    505 【IPCClient点登录后,再点其它窗口,最终导致程序主界面不能正常显示】
    506 OnInitdialog() 返回FALSE即可.
    507 PS:个人总结是:当返回TRUE时表明Windows自动的将输入焦点置于序列上排第一的 某个空件上;而当返回FALSE时只是表明你将输入焦点人为的改变在其他的某个控件上。
    508 
    509 
    510 
    511 
    512 
    513 【0407SY_PC     m_min.SetButtonImage(pBuffer); 中断】
    514 由于没加CDialog::OnInitDialog();
    515 
    516 
    517 【获取控件rect】
    518 CRect    rectList, rect1, rect2;
    519 m_midRList.GetItemRect(m_ncurSel, &rectList); //list box中的item区域
    520 //-------------
    521 CRect rect;
    522 GetDlgItem(IDC_BUTTON)->GetWindowRect(rect); //控件button
    523 
    524 【嵌入的dlg不显示控件, ondrawitem不响应。。。】
    525 1, 把别的dlg嵌入到了此处
    526 2, 没设置自绘属性, 或者没添加消息
    527 
    528 
    529 【画矩形。。。】
    530 CClientDC dc(this);//选定当前画图环境
    531     CPen pen(PS_SOLID,1,RGB(255,0,0));//做一支红色粗细为的笔
    532     dc.SelectObject(&pen);//将pen放到dc上
    533     dc.Rectangle(100,100,200,200);//画一个矩形
    534 //线条
    535 dc.MoveTo(m_rcL5.left, m_rcL5.bottom); //确定初始位置
    536 dc.LineTo(m_rcL5.right, m_rcL5.bottom); 
    537 
    538static/label控件背景透明】
    539 HBRUSH CLoginDlg::OnCtlColor(CDC* pDC,CWnd* pWnd,  UINT nCtlColor)
    540 {
    541     HBRUSH hbr = CDialog::OnCtlColor(pDC,pWnd, nCtlColor);
    542     switch (pWnd->GetDlgCtrlID())
    543     {
    544     case IDC_STATIC_FINDPWD:
    545         pDC->SetBkMode(TRANSPARENT);
    546         return HBRUSH(GetStockObject(HOLLOW_BRUSH));
    547     case IDC_STATIC_USR:
    548         pDC->SetBkMode(TRANSPARENT);
    549         return HBRUSH(GetStockObject(HOLLOW_BRUSH));
    550     case IDC_STATIC_PWD:
    551         pDC->SetBkMode(TRANSPARENT);
    552         return HBRUSH(GetStockObject(HOLLOW_BRUSH));
    553     case IDC_STATIC_SAVE_PWD:
    554         pDC->SetBkMode(TRANSPARENT);
    555         return HBRUSH(GetStockObject(HOLLOW_BRUSH));
    556     case IDC_STATIC_LIXIAN:
    557         pDC->SetBkMode(TRANSPARENT);
    558         return HBRUSH(GetStockObject(HOLLOW_BRUSH));
    559     case IDC_REG_STATIC_MAIL:
    560         pDC->SetBkMode(TRANSPARENT);
    561         return HBRUSH(GetStockObject(HOLLOW_BRUSH));
    562     case IDC_REG_STATIC_PWD:
    563         pDC->SetBkMode(TRANSPARENT);
    564         return HBRUSH(GetStockObject(HOLLOW_BRUSH));
    565     case IDC_REG_STATIC_RPWD:
    566         pDC->SetBkMode(TRANSPARENT);
    567         return HBRUSH(GetStockObject(HOLLOW_BRUSH));
    568     default:
    569         break;
    570     }
    571 
    572     return hbr;
    573 }
    574 
    575 【release, debug下通用的scopy】
    576 //_0408
    577 StrCpyW(g_nofityIconData.szTip, _T("商翼"));//debug
    578 
    579 【BitBlt(原图大小), StretchBlt(缩放)】
    580 一,
    581 memDC.BitBlt(x,y,rtClient.Width(),rtClient.Height(),&m_bkMemDC,0,0,SRCCOPY);
    582     memDC.StretchBlt(x,y,rtClient.Width(),78,&m_bkMemDC,0,0,150,78,SRCCOPY); 
    583 
    584 二, 
    585 //pDC->BitBlt(rcBtn.left, rcBtn.top, rcBtn.Width(), rcBtn.Height(), pDisplayMemDC, 0, 0, SRCCOPY);
    586     pDC->StretchBlt(rcTitleBk.left, rcTitleBk.top, rcTitleBk.Width(), rcTitleBk.Height(), pDisplayMemDC, 0, 0, 734, 24, SRCCOPY);//可缩放
    587 
    588 
    589 
    590 【ListBox】
    591 m_listctrl.ResetContent(); //清空listbox
    592 m_list.DeleteAllItems(); //清空listcontrol
    593 
    594 
    595 【exe位置 GetModulePath】
    596 CString strPath;
    597 strPath = GetModulePath();
    598 strPath += IMG_BK_PATH;
    599 
    600 【CFileDialog,  BROWSEINFO 会改变程序运行path, 从而可能导致异常】
    601 char    path[255];
    602 GetCurrentDirectory(255, path);
    603 strPath.Format(_T("%s"), path);
    604 Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    605 Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    606 Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    607 SetCurrentDirectory(strPath);
    608 //---------------------------------- ---------------------------
    609 编译时注意路径设置
    610 
    611 有时候去掉前半部分,运行出错。
    612 
    613 【按行读取文件MFC】
    614 CStdioFile file; 
    615 CString strLine,strtemp;
    616 if(!file.Open( "d:\test.txt ",CFile::modeRead))return;//打开*.TXT这个文件,打开形式为读取 
    617 int row = 0; //定义行变量
    618 while(file.ReadString(strLine))
    619 { 
    620 char *str = strLine.GetBufferSetLength(strLine.GetLength());
    621 char *p;
    622 if(strLine!="")
    623 { 
    624 for (p=strtok(str," ");p!=NULL;p=strtok(NULL," "))
    625 {
    626  strtemp = p;
    627 } 
    628 MessageBox(strtemp);
    629 }
    630 
    631 } 
    632 
    633 file.Close();
    634 
    635 
    636 【ListBox_Draw】
    637 DrawPic(m);
    638 g_Remote[m] //存放数据值
    639 
    640 m_listctrl.SetItemData(m_listctrl.AddString(g_Remote[m].name), (DWORD_PTR)m);
    641 
    642 
    643 ON_WM_MEASUREITEM()
    644     ON_WM_DRAWITEM()
    645 
    646 Void CLeftFrameDlg::OnMeasureItem( int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct )
    647 {
    648     lpMeasureItemStruct->itemHeight =70;
    649     CDialog::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
    650 }
    651 
    652 void CLeftFrameDlg::OnDrawItem( int nIDCtl,LPDRAWITEMSTRUCT lpDis )
    653 {
    654 }
    655 
    656 
    657 【窗口响应移动消息】
    658 ON_WM_NCHITTEST()
    659 
    660 LRESULT CLoginDlg::OnNcHitTest(CPoint point)//!!!!!!!!!
    661 {
    662 #define D1 10
    663 #define D2 12
    664         CRect rect;
    665         GetClientRect(&rect);
    666         ClientToScreen(&rect);
    667         CRect rFrame;
    668 
    669        m_nPosition = -1;
    670         rFrame.SetRect(rect.left+D1, rect.top+D1, 
    671             rect.left + 600, 
    672             rect.top+50); 
    673         if( rFrame.PtInRect(point) )
    674         {
    675            m_nPosition = 0;
    676             return HTCAPTION;
    677         }
    678     
    679 
    680 
    681     return CDialog::OnNcHitTest(point);
    682 }
    683 
    684 【限定MFC的EDT框输入数字且位数】
    685 m_edtchannel.SetLimitText(2); //限定输入位;
    686 设置属性number------------true
    View Code

     ////////////////////////////////////////////////////////////////////////////////、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

    响应重绘后listbox中item某个区域的事件

    int nCurSel = m_mailList.GetCurSel();
     g_nCur = nCurSel; //_0424

     CPoint point;
     GetCursorPos(&point);
     m_mailList.ScreenToClient(&point);

     CRect rectList, rect1;
     m_mailList.GetItemRect(nCurSel, &rectList);
     rect1 = rectList;

     rect1.top += 10;
     rect1.bottom = rect1.top + 18;
     rect1.left += 210;
     rect1.right = rect1.left + 15;
     if (rect1.PtInRect(point))
     {
      AfxMessageBox(_T("附件"));
     }

    【内核数,CPU使用率,installshield安装过程`协议许可】

       //判断核数

       SYSTEM_INFOsysInfo;

       GetSystemInfo(&sysInfo);

     

       //判断内存使用情况, 如果可用内存比小于.4,则使用辅码流

       CStringStrTotalMemory, StrUsedMemory, StrFreeMemory, StrFb, StrFb1;  

       MEMORYSTATUSMemStatus;  

       ::GlobalMemoryStatus(&MemStatus);

     

    //    StrTotalMemory.Format(" 系统总内存:%6fG ",  (float)MemStatus.dwTotalPhys/1024/1024/1024);   //

    //    StrFreeMemory.Format(" 系统可用内存:%6fG ",  (float)MemStatus.dwAvailPhys/1024/1024/1024);  //

    //    StrFb.Format(" 核:%d ", sysInfo.dwNumberOfProcessors);//

    //    OutputDebugString(StrFb);//

     

       floatfb = ((float)MemStatus.dwAvailPhys/1024/1024/1024)/((float)MemStatus.dwTotalPhys/1024/1024/1024);

       if ( (2 == sysInfo.dwNumberOfProcessors) || (fb < 0.50) ) //者内存使用率在%以上

       {

          g_UpDialog->m_PlayVideoCtrl.SetFBL(1);

          //OutputDebugString(" 单核或小于.5 ");//

       }

    //    StrFb1.Format(" 内存使用率:%f ", fb);//

    //    OutputDebugString(StrTotalMemory+StrFreeMemory+StrFb1);//

    /_1122 获得CPU使用率,一般第二次后才能获得

    //

    // CPU  ussage Mode

    //

    #defineSystemBasicInformation       0

    #defineSystemPerformanceInformation 2

    #defineSystemTimeInformation        3

     

    #defineLi2Double(x) ((double)((x).HighPart) * 4.294967296E9 + (double)((x).LowPart))

     

    //_1122 : cpu

    typedefstruct

    {

       DWORD   dwUnknown1;

       ULONG   uKeMaximumIncrement;

       ULONG   uPageSize;

       ULONG   uMmNumberOfPhysicalPages;

       ULONG   uMmLowestPhysicalPage;

       ULONG   uMmHighestPhysicalPage;

       ULONG   uAllocationGranularity;

       PVOID   pLowestUserAddress;

       PVOID   pMmHighestUserAddress;

       ULONG   uKeActiveProcessors;

       BYTE    bKeNumberProcessors;

       BYTE    bUnknown2;

       WORD    wUnknown3;

    } SYSTEM_BASIC_INFORMATION;

     

    typedefstruct

    {

       LARGE_INTEGER   liIdleTime;

       DWORD           dwSpare[76];

    } SYSTEM_PERFORMANCE_INFORMATION;

     

    typedefstruct

    {

       LARGE_INTEGERliKeBootTime;

       LARGE_INTEGERliKeSystemTime;

       LARGE_INTEGERliExpTimeZoneBias;

       ULONG         uCurrentTimeZoneId;

       DWORD         dwReserved;

    } SYSTEM_TIME_INFORMATION;

     

    LARGE_INTEGER  m_liOldIdleTime;

    LARGE_INTEGER  m_liOldSystemTime;

    intGetCpuuse(void)

    {

       SYSTEM_PERFORMANCE_INFORMATIONSysPerfInfo;

       SYSTEM_TIME_INFORMATION        SysTimeInfo;

       SYSTEM_BASIC_INFORMATION       SysBaseInfo;

       double                         dbIdleTime;

       double                         dbSystemTime;

       LONG                           status;

       typedefLONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG);

       PROCNTQSINtQuerySystemInformation;

     

       NtQuerySystemInformation = (PROCNTQSI)GetProcAddress(

          GetModuleHandle("ntdll"),

          "NtQuerySystemInformation"

          );

     

       if (!NtQuerySystemInformation)

       {

          return 0;

       }

     

       // get number of processors in the system

       status = NtQuerySystemInformation(SystemBasicInformation,

          &SysBaseInfo,sizeof(SysBaseInfo),NULL);

     

       if (status != NO_ERROR)

       {

          return 0;

       }

     

       status = NtQuerySystemInformation(SystemTimeInformation,

          &SysTimeInfo,sizeof(SysTimeInfo),0);

       if (status!=NO_ERROR)

       {

          return 0;

       }

     

       // get new CPU's idle time

       status = NtQuerySystemInformation(SystemPerformanceInformation,

          &SysPerfInfo,sizeof(SysPerfInfo),NULL);

     

       if (status != NO_ERROR)

       {

          return 0;

       }

     

       doublem_fNewUsges = 0;

     

       // if it's a first call - skip it

       if (m_liOldIdleTime.QuadPart != 0)

       {

          // CurrentValue = NewValue - OldValue

          dbIdleTime = Li2Double(SysPerfInfo.liIdleTime) - Li2Double(m_liOldIdleTime);

          dbSystemTime = Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(m_liOldSystemTime);

     

          // CurrentCpuIdle = IdleTime / SystemTime

          dbIdleTime = dbIdleTime / dbSystemTime;

     

          // CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors

          dbIdleTime = 100.0 - dbIdleTime * 100.0 / (double)SysBaseInfo.bKeNumberProcessors + 0.5;

     

          m_fNewUsges = (UINT)dbIdleTime;

       }

     

       // store new CPU's idle and system time

       m_liOldIdleTime = SysPerfInfo.liIdleTime;

       m_liOldSystemTime = SysTimeInfo.liKeSystemTime;

     

       return (int)m_fNewUsges;

    }

     ///////////////////////////////////////////////

    Installshield2010

    Disable (BACKBUTTON);

    if(!MAINTENANCE)then

    SdLicense2 ("License ", "", "", SUPPORTDIR ^ "aa.txt", FALSE);

    endif;

  • 相关阅读:
    代码那些事儿之葫芦娃救爷爷
    《数学计算出题系统》功能规格说明书
    有点难
    肝不动了
    so easy, too happy
    新学期的展望
    Android Gradle插件
    重学数据结构和算法(三)之递归、二分、字符串匹配
    重学数据结构和算法(二)之二叉树、红黑树、递归树、堆排序
    重学数据结构和算法(一)之复杂度、数组、链表、栈、队列、图
  • 原文地址:https://www.cnblogs.com/Miami/p/3141010.html
Copyright © 2011-2022 走看看