青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Sleeping

Note Book

2008年10月7日 #

DialogBox的若干問題

今天繼續(xù)折騰那個List Box控件,發(fā)現(xiàn)一個問題,當(dāng)對話框出來之后,被主窗體給刷屏了,不能得到子窗體的句柄。后經(jīng)仔細調(diào)試,發(fā)現(xiàn)一些端倪。首先在調(diào)用 DialogBox函數(shù)時 ,所生成的Dialog(我這里的Dialog面板里有一個Edit控件 兩個按鈕控件 和一個List Box控件)依次產(chǎn)生的消息隊列如下所示:
WM_SETFONT    0x0030                 設(shè)置字體
WM_INITDIALOG 0x0110                 初始化Dialog
WM_WINDOWPOSCHANGING            0x0046                窗體大小 位置等轉(zhuǎn)變的消息
WM_NCACTIVATE   0x0086          改變一個非工作區(qū)域 sent to a window when its nonclient area needs to be changed to indicate an active or inactive state.
WM_ACTIVATE     0x0006   讓你窗體無效 并激活子窗體
WM_COMMAND   0x0111 (HIWORD(WPARAM))->LBN_SETFOCUS(4) ->LBN_KILLFOCUS(5) 消息命令 ListBox
WM_USER     0x0400    用戶自定義消息
WM_NCACTIVATE  0x0086
WM_SHOWWINDOW   0x0018   顯示窗體
WM_WINDOWPOSCHANGING 0x0046
WM_NCPAINT 0x0085    The WM_NCPAINT message is sent to a window when its frame must be painted.
WM_ERASEBKGND 0x0014   清楚窗口背景
WM_WINDOWPOSCHANGED 0x0047  
WM_GETICON 0x007F  3次   The WM_GETICON message is sent to a window to retrieve a handle to the large or small icon associated with a window
WM_NCCALCSIZE 0x0083   計算機窗體大小尺寸
WM_MOVE 0x0003     移動
WM_SIZE 0x0005     改變大小
WM_PAINT 0x000F    繪制窗體
WM_CTLCOLORBTN 0x0135   繪制按鈕的顏色
WM_CTLCOLORLISTBOX 0x0134  繪制Listbox的顏色
WM_CTLCOLOREDIT 0x0133   繪制Edit的顏色
WM_POWERBROADCAST 0x0218   broadcast to an application to notify it of power-management events
while(1) 一直循環(huán)以下的兩個消息
WM_NCACTIVATE  0x0086
WM_WINDOWPOSCHANGING            0x0046

代碼如下:
BOOL CALLBACK  ListBoxTest(HWND hWnd,UINT message , WPARAM wParam, LPARAM lParam) 

int wmId = LOWORD(wParam ); 
int wmEvent = HIWORD(wParam) ; 
int i ; 
HDC hDc ; 
PAINTSTRUCT ps ; 
HWND hListBox ; 
switch(message) 

  
case WM_INITDIALOG: 
   hListBox 
= GetDlgItem(hWnd,IDC_LIST_TEST) ; 
   
for(i = 0; MyData[i].Name[0!= 0 ; i++

    SendMessage(hListBox,LB_ADDSTRING,
0,(LPARAM)MyData[i].Name) ; 
    SendMessage(hListBox,LB_SETITEMDATA,  i ,(LPARAM)i) ; 
   }
 
   SetFocus(hListBox); 
   
return (TRUE) ; 
  
case WM_PAINT: 
   hDc 
= BeginPaint(hWnd,&ps) ; 
   
//MSGPRINT(_T("Print")) ; 
   EndPaint(hWnd,&ps); 
   
break ; 
  
case LB_ADDFILE: 
   
break ; 
  
case WM_COMMAND: 
   
switch(wmId) 
{
 
   
case IDC_LIST_TEST: 
    
switch(wmEvent) 
   {
 
    
case LBN_SELCHANGE: 
     
//MSGPRINT(_T("LBN_SELCHANGE")); 
     break ; 
    
case LBN_DBLCLK: 
     
//MSGPRINT(_T("LBN_DBLCLK")); 
     break ; 
    
case LBN_SETFOCUS: 
     
//MSGPRINT(_T("LBN_SETFOCUS")) ; 
     break ; 
    
case LBN_KILLFOCUS: 
     
//MSGPRINT(_T("LBN_KILLFOCUS")) ; 
     break ; 
    }
 
    
return FALSE ; 
    
break ; 
   
case IDOK: 
    MSGPRINT(_T(
"IDOK")); 
    EndDialog(hWnd,
0) ; 
    
return TRUE; 
    
break ; 
   
case IDCANCEL: 
    MSGPRINT(_T(
"IDCANCEL")); 
    EndDialog(hWnd,
0) ; 
    
return TRUE ; 
    
break ; 
   }
 
}
 
return FALSE;
}

如果最后返回TRUE那么窗體的著色會很有問題,Dialog的顏色和背景顏色完全一樣,導(dǎo)致不能看到一個窗體的存在,所以這里必須返回FALSE,
MSDN作出的解釋如下:Typically, the dialog box procedure should return TRUE if it processed the message, and FALSE if it did not. If the dialog box procedure returns FALSE, the dialog manager performs the default dialog operation in response to the message.
意即,如果這個窗體想處理哪個消息就返回TRUE,如果不想處理這個消息就返回FALSE,所以在最后應(yīng)該返回False,即默認不處理那些消息而只算WM_INITDIALOG 和其它一些IDOK IDCANCEL的消息。
If the dialog box procedure processes a message that requires a specific return value, the dialog box procedure should set the desired return value by calling SetWindowLong(hwndDlg, DWL_MSGRESULT, lResult) immediately before returning TRUE. Note that you must call SetWindowLong immediately before returning TRUE; doing so earlier may result in the DWL_MSGRESULT value being overwritten by a nested dialog box message.

這個嘛   靠 英文 爛!勉勉強強
如果窗體在處理一個消息時需要顯示地返回一個值,那這個窗體應(yīng)該在返回TRUE前調(diào)用SetWindoLong(hWndDlg,DWL_MSGRESULT,lpResult)函數(shù)更改想要返回的值.切記一定要馬上調(diào)用該函數(shù)在返回TRUE之前,盡可能早地通過DWL_MSGRESULT去改寫真正的Result,by a nested dialog box message.  他媽的這句怎么翻譯?


現(xiàn)在都開始懷疑弄這些消息有什么用,用MFC肯定是一個更好的選擇。在List Box里增加和刪除內(nèi)容都是太煩了,都是通過SendMessage來完成的。不知道能堅持學(xué)到什么時候。

posted @ 2008-10-07 21:42 祥子_隨波逐流 閱讀(2082) | 評論 (0)編輯 收藏

2008年10月5日 #

關(guān)于FormatMessage的錯誤

#ifdef UNICODE 
typedef WCHAR
* TYPESTR ; 
typedef WCHAR TYPECHAR ; 
#else //UNICODE 
typedef 
char* TYPESTR ; 
typedef 
char TYPECHAR ; 
#endif 
#define ERRINFO _T("調(diào)試錯誤信息") 

VOID PrintError(DWORD dwErrNo,TYPESTR szFileName,DWORD LineNo) 

TCHAR
* szErrBuff ; // TCHAR 
TYPESTR szBuff =(TCHAR*) LocalAlloc(LPTR,sizeof(TYPECHAR)*512) ; 
if(szBuff == NULL) 

  MessageBox(NULL,_T(
"內(nèi)存分配失敗"),ERRINFO,MB_OK) ; 
  
return ; 
}
 
// 這個地方報 讀取位置 0x00000000 時發(fā)生訪問沖突 或者 The variable 'szErrBuff' is being used without being defined. 
    //原因是 包含| FORMAT_MESSAGE_FROM_STRING
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 
                            // | FORMAT_MESSAGE_FROM_STRING, 
    NULL, 
    dwErrNo, 
    MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), 
    (LPTSTR) 
&szErrBuff, 
    
sizeof(szErrBuff), 
    NULL) ; 

#ifdef UNICODE 
wsprintf(szBuff,L
"%s 第%d行;錯誤信息:%s",szFileName,LineNo,szErrBuff) ; 
#else 
sprintf(szBuff,
"文件名%s 第%d行;錯誤信息:%s",szFileName,LineNo,szErrBuff) ; 
#endif 
MessageBox(NULL,szBuff,ERRINFO,MB_OK) ; 
LocalFree((HLOCAL)szErrBuff) ; 
LocalFree( szBuff); 
return ; 
}
 

VOID TestForPrintError()
{
    SECURITY_ATTRIBUTES sp;
    sp.nLength 
= sizeof(sp) ;
    sp.bInheritHandle 
= FALSE ;
    sp.lpSecurityDescriptor 
= NULL ;
#ifdef UNICODE 
    TYPESTR szFileName 
= _T("d:\\he.txt") ;
#else
    TYPESTR szFileName 
= "d:\\he.txt" ;
#endif
    
//如何判斷文件是否已經(jīng)存在了?
    HANDLE hFile = CreateFile(szFileName,
        GENERIC_READ 
|GENERIC_WRITE | GENERIC_EXECUTE ,
        NULL, 
//FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
        NULL, //&sp,
        CREATE_ALWAYS, //| OPEN_EXISTING, //如果有這個會報 在沒有原文件的時候會報系統(tǒng)找不到指定的文件
        FILE_ATTRIBUTE_NORMAL,
        NULL) ;
    
if(hFile ==  INVALID_HANDLE_VALUE)
 
{
        DWORD dwErrNo 
= GetLastError() ;
        PRINTERROINFO(GetLastError() ,__FILE__,__LINE__) ;
    }

    DWORD lenth ;
        //這個函數(shù)好像比較少用了 不支持Unicode
    
if(!WriteFile(hFile,"hello",4,&lenth,NULL))
        PRINTERROINFO(GetLastError() ,__FILE__,__LINE__) ;
    CloseHandle(hFile) ;
    
return ;
}

posted @ 2008-10-05 18:30 祥子_隨波逐流 閱讀(655) | 評論 (0)編輯 收藏

僅列出標題  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧美激情视频在线观看一区二区三区 | 久久久久久久999精品视频| 亚洲欧洲在线看| 亚洲国产成人久久综合| 狠狠色狠狠色综合日日五| 精品99一区二区三区| 亚洲国产99| 99re6这里只有精品视频在线观看| 亚洲国产日韩在线一区模特| 日韩亚洲欧美在线观看| 午夜亚洲视频| 久久久久久伊人| 亚洲国产欧美日韩另类综合| 日韩网站在线观看| 亚洲在线成人精品| 久久大香伊蕉在人线观看热2| 久久一区国产| 国产精品vvv| 一区精品在线播放| av成人免费观看| 久久黄色影院| 亚洲国产视频一区| 亚洲欧美日韩中文播放| 久久人人97超碰精品888| 欧美激情视频网站| 国内精品久久久久久久97牛牛| 亚洲精品久久视频| 欧美在线观看天堂一区二区三区| 欧美成人综合| 羞羞漫画18久久大片| 欧美电影在线| 永久域名在线精品| 亚洲天堂男人| 亚洲激情精品| 久久免费黄色| 国产亚洲视频在线观看| 日韩西西人体444www| 久久免费午夜影院| 亚洲视频免费观看| 欧美激情第六页| 亚洲高清久久久| 国产精品国产自产拍高清av王其 | 欧美a一区二区| 国产视频亚洲精品| 亚洲一级黄色av| 亚洲激情网址| 免费在线观看日韩欧美| 黄色一区二区在线观看| 亚洲嫩草精品久久| 亚洲精品少妇网址| 免费亚洲电影在线| 好看的日韩视频| 久久精品视频在线观看| 亚洲一区二区免费看| 一本在线高清不卡dvd | 亚洲高清久久网| 亚洲欧洲一区二区天堂久久| 久久久水蜜桃av免费网站| 亚洲高清影视| 久久岛国电影| 国产区欧美区日韩区| 亚洲在线视频观看| 亚洲欧美日韩一区二区三区在线观看 | 国产精品国码视频| 亚洲激情婷婷| 欧美福利精品| 另类综合日韩欧美亚洲| 在线观看日韩精品| 欧美粗暴jizz性欧美20| 欧美成人情趣视频| 夜夜爽www精品| 在线一区欧美| 国产视频不卡| 欧美不卡激情三级在线观看| 另类欧美日韩国产在线| 日韩视频在线观看国产| av72成人在线| 国产欧美1区2区3区| 久久精品中文字幕免费mv| 久久久久久有精品国产| 亚洲精品五月天| 亚洲一区二区高清| 狠狠88综合久久久久综合网| 欧美激情无毛| 国产精品成人一区二区艾草| 久久精品免费播放| 免费欧美日韩国产三级电影| 在线亚洲免费| 欧美在线网址| 一本色道久久88综合日韩精品| 在线中文字幕一区| 狠狠色综合一区二区| 亚洲高清在线精品| 国产精品区二区三区日本| 免费一级欧美片在线播放| 欧美日韩国产高清视频| 久久精品最新地址| 欧美日本簧片| 美女免费视频一区| 国产精品视频一区二区三区| 欧美成人在线免费观看| 国产精品视频| 亚洲精品在线观| 一色屋精品视频在线看| 亚洲午夜激情网站| 亚洲三级影院| 欧美va亚洲va香蕉在线| 影音先锋一区| av成人激情| 亚洲黑丝一区二区| 久久久无码精品亚洲日韩按摩| 欧美日本一区二区视频在线观看 | 亚洲激情视频网站| 先锋影音网一区二区| 一道本一区二区| 久久午夜国产精品| 香蕉成人伊视频在线观看 | 欧美有码视频| 午夜精品视频在线观看一区二区| 男人的天堂亚洲| 久久综合导航| 国产亚洲毛片在线| 亚洲婷婷综合久久一本伊一区| 亚洲青涩在线| 久久日韩精品| 玖玖玖国产精品| 国产亚洲精品美女| 午夜在线视频观看日韩17c| 午夜精品久久久| 欧美日韩国产综合网| 亚洲区一区二| 亚洲免费精品| 欧美激情小视频| 亚洲国产裸拍裸体视频在线观看乱了| 原创国产精品91| 久久美女性网| 亚洲二区三区四区| 亚洲美女91| 欧美日韩成人综合| 在线亚洲激情| 欧美一级在线视频| 国产精品任我爽爆在线播放| 亚洲欧美日韩精品一区二区| 欧美资源在线观看| 国内精品久久久久久久影视蜜臀| 欧美一区二区三区免费视频| 久久精品九九| 亚洲国产精品悠悠久久琪琪| 欧美大片免费| 国产精品99久久久久久www| 午夜日韩福利| 极品尤物av久久免费看| 美女视频网站黄色亚洲| 亚洲欧洲日本国产| 亚洲一二三区在线观看| 国产精品视频99| 久久日韩粉嫩一区二区三区| 亚洲精品国产精品国自产观看浪潮| 9人人澡人人爽人人精品| 国产精品v日韩精品v欧美精品网站| 亚洲一区二区三区四区视频| 久久先锋资源| 日韩西西人体444www| 国产精品免费在线| 久久久久看片| 一区二区三区精品| 久久蜜臀精品av| 亚洲视频欧美视频| 国产一区二区三区四区在线观看 | 欧美一区2区三区4区公司二百| 亚洲自拍偷拍网址| 国产日韩欧美高清| 欧美成人资源网| 欧美日韩精品欧美日韩精品| 亚洲一区二区三区免费观看| 亚洲性色视频| 亚洲精品一区二区三区福利| 日韩午夜在线播放| 国产一区二区三区黄| 亚洲国产精品传媒在线观看| 欧美天天影院| 亚洲第一二三四五区| 欧美日韩精品一区二区三区四区| 午夜精品一区二区三区四区| 美女主播视频一区| 欧美在线三区| 国产欧美日韩精品在线| 亚洲激情不卡| 日韩午夜免费视频| 免费在线日韩av| 免费欧美高清视频| 精品动漫3d一区二区三区免费版| 日韩一区二区免费看| 亚洲欧洲偷拍精品| 欧美成人视屏| 亚洲精选久久| 一区二区三区精品| 欧美日韩国产成人| 99精品热6080yy久久| 一区二区三区国产|