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

Sleeping

Note Book

2008年10月7日 #

DialogBox的若干問題

今天繼續折騰那個List Box控件,發現一個問題,當對話框出來之后,被主窗體給刷屏了,不能得到子窗體的句柄。后經仔細調試,發現一些端倪。首先在調用 DialogBox函數時 ,所生成的Dialog(我這里的Dialog面板里有一個Edit控件 兩個按鈕控件 和一個List Box控件)依次產生的消息隊列如下所示:
WM_SETFONT    0x0030                 設置字體
WM_INITDIALOG 0x0110                 初始化Dialog
WM_WINDOWPOSCHANGING            0x0046                窗體大小 位置等轉變的消息
WM_NCACTIVATE   0x0086          改變一個非工作區域 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) 一直循環以下的兩個消息
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的顏色和背景顏色完全一樣,導致不能看到一個窗體的存在,所以這里必須返回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,所以在最后應該返回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.

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


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

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

2008年10月5日 #

關于FormatMessage的錯誤

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

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(
"內存分配失敗"),ERRINFO,MB_OK) ; 
  
return ; 
}
 
// 這個地方報 讀取位置 0x00000000 時發生訪問沖突 或者 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
    
//如何判斷文件是否已經存在了?
    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, //如果有這個會報 在沒有原文件的時候會報系統找不到指定的文件
        FILE_ATTRIBUTE_NORMAL,
        NULL) ;
    
if(hFile ==  INVALID_HANDLE_VALUE)
 
{
        DWORD dwErrNo 
= GetLastError() ;
        PRINTERROINFO(GetLastError() ,__FILE__,__LINE__) ;
    }

    DWORD lenth ;
        //這個函數好像比較少用了 不支持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>
            亚洲青涩在线| 欧美性事免费在线观看| 久久精品中文字幕一区| 欧美一区二区三区四区在线| 久久九九免费| 亚洲国产精品久久久久秋霞不卡| 亚洲美女av电影| 翔田千里一区二区| 欧美成人精品一区二区| 亚洲乱亚洲高清| 久久久久久**毛片大全| 国产精品久久久久一区二区三区共| 红桃视频欧美| 亚洲欧美日韩国产中文在线| 免费日韩av片| 午夜精品一区二区三区在线播放 | 欧美一区三区三区高中清蜜桃| 美女主播一区| 欧美美女视频| 在线观看的日韩av| 欧美在线黄色| 亚洲午夜羞羞片| 欧美成人免费va影院高清| 国产一区二区三区精品欧美日韩一区二区三区 | 国产伦精品一区二区三区在线观看| 亚洲黄一区二区| 美国十次成人| 国产精品扒开腿做爽爽爽视频| 久久免费少妇高潮久久精品99| 亚洲午夜电影| 亚洲日本va午夜在线影院| 中文有码久久| 国产精品劲爆视频| 亚洲男女自偷自拍| 久热精品视频| 亚洲国产精品嫩草影院| 亚洲一区在线观看视频| 国产精品视频一二| 欧美中文字幕视频| 欧美精品自拍偷拍动漫精品| 久久综合九色九九| 久久久久久久一区二区三区| 亚洲一区国产| 亚洲一区久久久| 亚洲免费观看在线观看| 久久久av水蜜桃| 午夜精品一区二区三区四区| 亚洲欧美日韩精品综合在线观看| 国产日韩精品电影| 美女国产一区| 狠狠久久亚洲欧美| 午夜精品久久久久久久99樱桃| 亚洲一区二区三区四区中文| 一区二区av| 国产老肥熟一区二区三区| 亚洲精品自在久久| 亚洲乱码久久| 欧美高清成人| 羞羞答答国产精品www一本| 欧美人在线观看| 亚洲国产一区二区三区高清| 欧美电影免费| 欧美伦理a级免费电影| 欧美福利精品| 亚洲激情一区二区| 欧美国产日韩一区| 亚洲破处大片| 国产日韩亚洲欧美| 欧美高清在线一区| 亚洲乱码国产乱码精品精天堂| 你懂的亚洲视频| 亚洲欧美日韩国产综合在线| 欧美视频在线视频| 另类激情亚洲| 国产精品激情| 亚洲欧美一区在线| 久久久综合网站| 国模套图日韩精品一区二区| 亚洲精品一区二区三区婷婷月| 亚洲最黄网站| 欧美制服丝袜| 亚洲欧美激情一区二区| 国产精品视频免费观看| 欧美一区二区三区播放老司机| 久久人人爽人人爽| 亚洲精品国产精品国产自| 先锋影音国产一区| 老巨人导航500精品| 亚洲欧洲日韩综合二区| 欧美色图麻豆| 久久精品国产精品亚洲综合 | 欧美三级午夜理伦三级中视频| 在线亚洲美日韩| 久久夜色精品国产| 亚洲少妇在线| 欧美精品一区二区三区四区| 在线亚洲电影| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲国产一区视频| 国产精品午夜视频| 免费高清在线一区| 麻豆精品在线观看| 亚洲社区在线观看| 亚洲大片av| 久久视频一区| 美女久久一区| 亚洲一级在线| 亚洲国产成人porn| 国产精品一区二区久久国产| 久久亚洲私人国产精品va媚药| 一区二区三区视频免费在线观看| 久久色中文字幕| 亚洲一区国产一区| 亚洲精品国产欧美| 国产综合在线视频| 国产精品v日韩精品| 欧美不卡三区| 久久久久看片| 久久高清国产| 亚洲在线黄色| 一本久久青青| 亚洲精品乱码| 亚洲观看高清完整版在线观看| 91久久精品一区二区三区| 国产日韩欧美一区在线| 国产精品久久久对白| 欧美精品一区二区三区四区 | 午夜精品视频在线观看一区二区| 亚洲国产精品久久精品怡红院| 久久久久久久性| 亚洲激情成人| 在线观看欧美亚洲| 黄色小说综合网站| 国产一区二区丝袜高跟鞋图片| 国产精品女人毛片| 国产精品视频yy9299一区| 欧美午夜精品电影| 欧美偷拍另类| 国产精品久久九九| 国产精品美女999| 国产精品r级在线| 国产精品都在这里| 国产精品进线69影院| 国产精品久久久99| 国产精品欧美日韩| 国产伦精品一区二区三区四区免费| 国产精品拍天天在线| 国产精品亚洲视频| 国产亚洲一级| 在线精品视频在线观看高清 | 国产精品成人一区二区艾草| 欧美日韩亚洲综合一区| 久久精品91久久香蕉加勒比| 性做久久久久久免费观看欧美 | 亚洲国产欧美一区二区三区久久| 亚洲成人资源网| 欧美在线啊v| 久久久久一区二区| 欧美 亚欧 日韩视频在线| 欧美成人免费全部观看天天性色| 亚洲国产精品电影在线观看| 日韩午夜一区| 亚洲国产精品成人综合| 亚洲精品偷拍| 亚洲欧美成人一区二区三区| 亚洲国产日韩精品| 日韩亚洲一区在线播放| 篠田优中文在线播放第一区| 久久综合九色九九| 欧美极品在线播放| 久久亚洲一区二区三区四区| 欧美精品一区二区三| 国产精品福利在线| 在线免费不卡视频| 亚洲视频网站在线观看| 久久久久久91香蕉国产| 欧美国产日产韩国视频| 久久九九国产精品怡红院| 亚洲丰满在线| 性色av一区二区三区在线观看| 男女av一区三区二区色多| 国产精品美女久久| 亚洲欧洲久久| 久久免费偷拍视频| 亚洲美洲欧洲综合国产一区| 欧美在线观看视频| 国产精品magnet| 亚洲电影免费观看高清| 亚洲综合首页| 亚洲福利视频网站| 欧美一级久久久久久久大片| 欧美理论在线| 亚洲高清资源| 久久国产高清| 一区二区三区日韩精品| 男女视频一区二区| 影音先锋亚洲一区| 欧美中文字幕精品| 亚洲四色影视在线观看| 欧美精品一区在线发布|