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

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>
            激情综合中文娱乐网| 91久久综合| 久久精品九九| 久久精品卡一| 亚洲高清影视| 亚洲精品乱码久久久久| 欧美日韩dvd在线观看| 亚洲视频中文| 欧美一级播放| 亚洲欧洲午夜| 一区二区久久久久| 国产日本欧美视频| 欧美激情四色| 国产精品日本欧美一区二区三区| 欧美亚洲一级| 免费观看成人| 亚洲免费网址| 免费成人av| 午夜精品福利一区二区蜜股av| 久久精品亚洲国产奇米99| 亚洲国产乱码最新视频| 日韩午夜中文字幕| 樱花yy私人影院亚洲| 亚洲精品视频在线| 国产午夜精品久久久| 亚洲精品123区| 国产日产精品一区二区三区四区的观看方式 | 欧美在线观看视频一区二区| 在线看片日韩| 亚洲综合国产激情另类一区| 亚洲国产黄色| 午夜精品久久久久影视| 99re66热这里只有精品3直播| 亚洲免费在线精品一区| 99成人免费视频| 久久久99国产精品免费| 亚洲天堂免费在线观看视频| 欧美在线免费观看亚洲| 亚洲在线日韩| 欧美韩日视频| 欧美国产日本在线| 国产美女诱惑一区二区| 夜夜夜精品看看| 日韩午夜激情av| 久久免费99精品久久久久久| 久久本道综合色狠狠五月| 欧美日韩精品在线视频| 亚洲大片精品永久免费| 一区二区在线不卡| 欧美一区日本一区韩国一区| 亚洲欧美另类国产| 欧美日韩精品久久久| 欧美激情一区二区三区蜜桃视频 | 老色鬼久久亚洲一区二区| 欧美影院成人| 国产精品大片| 99精品国产在热久久下载| 亚洲欧洲午夜| 欧美成在线观看| 欧美激情精品久久久久久久变态 | 欧美伦理91| 亚洲精品视频免费观看| 一本色道久久99精品综合| 欧美精品一区二区在线观看| 亚洲国产成人久久| 亚洲狼人精品一区二区三区| 免费看亚洲片| 亚洲片国产一区一级在线观看| 亚洲国产视频一区| 欧美国产亚洲另类动漫| 亚洲经典三级| 亚洲一区国产| 国产精品一区二区欧美| 欧美一区二区三区四区在线观看 | 午夜精品久久久久久久久久久久久| 欧美激情综合五月色丁香小说| 欧美成人午夜激情视频| 亚洲精品美女久久7777777| 欧美国产精品中文字幕| 日韩视频二区| 欧美一级理论片| 精品动漫3d一区二区三区免费| 两个人的视频www国产精品| 亚洲国产经典视频| 亚洲一区二区伦理| 国产精品自拍网站| 久久伊人免费视频| 91久久亚洲| 久久狠狠亚洲综合| 亚洲国产精品嫩草影院| 欧美另类亚洲| 先锋影音久久久| 欧美成人蜜桃| 亚洲欧美日韩国产综合精品二区| 国产毛片久久| 欧美国产第一页| 亚洲一区久久久| 欧美成人自拍视频| 亚洲一区区二区| 在线播放国产一区中文字幕剧情欧美 | 亚洲人成在线观看| 久久国产精品网站| 亚洲精品极品| 国产日韩欧美一区在线 | 欧美日韩亚洲一区二区| 午夜一区在线| 亚洲三级国产| 久久综合中文字幕| 亚洲午夜在线观看视频在线| 黄色亚洲在线| 国产精品v欧美精品v日韩精品| 久久久久一区二区三区四区| 日韩一级不卡| 欧美成人一区二区三区| 欧美亚洲免费| 亚洲在线视频| 夜夜嗨av一区二区三区| 亚洲国产高清高潮精品美女| 国产精品亚洲片夜色在线| 欧美高清视频一区| 久久午夜国产精品| 欧美中文在线观看| 亚洲综合色丁香婷婷六月图片| 亚洲黄色影院| 亚洲成人资源网| 欧美sm视频| 久热精品在线| 久久久久久噜噜噜久久久精品| 亚洲免费视频中文字幕| 99精品欧美一区二区三区| 一区一区视频| 狠狠色综合一区二区| 国产精品手机视频| 国产精品高潮呻吟久久av无限| 欧美日产在线观看| 欧美伦理91| 欧美日韩三级在线| 欧美日韩国产小视频| 欧美日韩精品是欧美日韩精品| 欧美成人激情视频| 欧美精品在线观看播放| 欧美激情欧美激情在线五月| 米奇777超碰欧美日韩亚洲| 久久精品视频va| 久久久久在线观看| 老司机精品久久| 理论片一区二区在线| 欧美88av| 欧美日韩少妇| 国产精品一区二区欧美| 国产欧美在线播放| 国产专区欧美精品| 在线日韩av片| 亚洲精品国产无天堂网2021| 夜久久久久久| 午夜在线观看免费一区| 欧美诱惑福利视频| 蜜乳av另类精品一区二区| 欧美成人午夜激情| 亚洲精品女av网站| 亚洲免费观看在线视频| 亚洲一区精彩视频| 久久激情视频| 欧美多人爱爱视频网站| 欧美日韩一区免费| 国产综合久久久久久| 亚洲国产欧美久久| 亚洲一级二级| 久久午夜精品| 亚洲人体大胆视频| 亚洲欧美日韩综合国产aⅴ| 久久精品国产清自在天天线| 免费成人高清视频| 国产精品网站一区| 亚洲欧洲一区| 性做久久久久久免费观看欧美| 免费在线欧美视频| 日韩亚洲欧美高清| 久久精品一区二区| 欧美日韩成人在线| 伊人激情综合| 亚洲中午字幕| 欧美激情精品久久久久久黑人| 亚洲网站视频福利| 乱码第一页成人| 国产日韩欧美成人| 99精品视频免费在线观看| 久久精品亚洲热| 一区二区三区欧美激情| 久久夜色精品亚洲噜噜国产mv | 欧美激情一区二区三区高清视频 | 欧美日韩国产综合新一区| 国产一区二区三区久久| 在线视频精品一| 欧美ab在线视频| 亚洲欧美在线磁力| 欧美三级视频在线播放| 亚洲人成网站777色婷婷| 久久九九全国免费精品观看| av成人手机在线|