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

Sleeping

Note Book

2008年10月7日 #

DialogBox的若干問題

今天繼續(xù)折騰那個List Box控件,發(fā)現(xiàn)一個問題,當對話框出來之后,被主窗體給刷屏了,不能得到子窗體的句柄。后經(jīng)仔細調試,發(fā)現(xiàn)一些端倪。首先在調用 DialogBox函數(shù)時 ,所生成的Dialog(我這里的Dialog面板里有一個Edit控件 兩個按鈕控件 和一個List Box控件)依次產生的消息隊列如下所示:
WM_SETFONT    0x0030                 設置字體
WM_INITDIALOG 0x0110                 初始化Dialog
WM_WINDOWPOSCHANGING            0x0046                窗體大小 位置等轉變的消息
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的顏色和背景顏色完全一樣,導致不能看到一個窗體的存在,所以這里必須返回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)函數(shù)更改想要返回的值.切記一定要馬上調用該函數(shù)在返回TRUE之前,盡可能早地通過DWL_MSGRESULT去改寫真正的Result,by a nested dialog box message.  他媽的這句怎么翻譯?


現(xiàn)在都開始懷疑弄這些消息有什么用,用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 時發(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>
            国产精品一区二区欧美| 国产亚洲欧美另类中文| 99精品久久久| 亚洲精品美女在线| 欧美调教视频| 翔田千里一区二区| 欧美影视一区| 亚洲国内自拍| 亚洲另类自拍| 国产精品日韩久久久| 久久9热精品视频| 久久免费黄色| 中日韩在线视频| 午夜精品影院| 91久久久久久国产精品| 在线视频精品一区| 国内成人精品一区| 亚洲国产另类精品专区| 在线观看欧美视频| 免费成人黄色av| 欧美一区二区免费观在线| 黄色日韩在线| 亚洲人成人77777线观看| 国产精品久久久久久五月尺| 欧美在线视频一区| 欧美成人首页| 午夜久久资源| 欧美 日韩 国产 一区| 一区二区欧美视频| 香蕉尹人综合在线观看| 亚洲精品免费在线观看| 亚洲一区二区精品| 亚洲欧洲日韩女同| 亚洲综合色在线| 91久久国产综合久久蜜月精品| 在线亚洲电影| 亚洲日韩欧美一区二区在线| 亚洲女同同性videoxma| 一本久道综合久久精品| 久久久www| 欧美亚洲色图校园春色| 欧美精品粉嫩高潮一区二区 | 久久久水蜜桃av免费网站| 在线视频你懂得一区| 久久久久国产一区二区| 午夜精品久久久久久99热软件| 免费久久99精品国产| 欧美亚洲一区二区在线观看| 欧美精品久久一区二区| 美女尤物久久精品| 国产精品网站在线播放| 91久久精品视频| 在线激情影院一区| 新67194成人永久网站| 亚洲综合好骚| 欧美精品在线免费播放| 欧美大片va欧美在线播放| 国产一区二区三区四区| 一区二区三区|亚洲午夜| 日韩视频永久免费| 男人的天堂成人在线| 免费影视亚洲| 1024成人网色www| 久久精品在线观看| 老**午夜毛片一区二区三区| 国产亚洲va综合人人澡精品| 亚洲视频综合| 欧美一区二区三区在线播放| 国产精品乱码| 亚洲欧美激情视频在线观看一区二区三区| 亚洲无限av看| 国产精品伦子伦免费视频| 一区二区日韩伦理片| 亚洲欧美激情一区二区| 国产精品日本| 午夜精品久久久久久久99水蜜桃| 久久激情五月丁香伊人| 国内精品久久久久久久97牛牛| 欧美一区二区三区在线免费观看| 久久久国产一区二区| 国产一区二区久久| 久久久久88色偷偷免费| 欧美成人自拍视频| 日韩一级片网址| 国产精品va在线播放我和闺蜜| 亚洲欧美日韩在线观看a三区| 久久狠狠婷婷| 亚洲激情在线观看| 欧美日韩国语| 香蕉久久夜色精品国产使用方法| 久久婷婷国产综合精品青草| 亚洲国产国产亚洲一二三| 欧美成人精品激情在线观看| 亚洲九九爱视频| 欧美一区在线看| 亚洲第一黄网| 欧美午夜视频在线观看| 欧美在线精品免播放器视频| 欧美黑人多人双交| 亚洲视频网站在线观看| 国产亚洲欧美日韩一区二区| 久久综合给合| 亚洲视频二区| 欧美福利网址| 久久se精品一区精品二区| 在线观看不卡| 国产精品日韩精品欧美精品| 久久字幕精品一区| 一个色综合av| 亚洲黑丝一区二区| 久久黄色小说| 亚洲一区欧美二区| 亚洲级视频在线观看免费1级| 国产精品高精视频免费| 免费高清在线一区| 午夜国产不卡在线观看视频| 亚洲国产精品毛片| 久久精品观看| 午夜精品www| 一区二区三区黄色| 在线免费高清一区二区三区| 国产精品久久久一本精品| 免费在线看一区| 久久久久久久97| 欧美一级在线视频| 一区二区三区国产在线观看| 亚洲第一精品福利| 快射av在线播放一区| 亚洲一区精品在线| 99在线热播精品免费| 亚洲国产第一| 影院欧美亚洲| 红桃av永久久久| 国产亚洲午夜高清国产拍精品| 欧美日韩色综合| 欧美人成网站| 欧美视频在线观看一区| 欧美精品一区二区在线观看| 欧美福利小视频| 欧美福利视频一区| 欧美a级在线| 欧美成人免费小视频| 久久在线免费观看视频| 狂野欧美激情性xxxx欧美| 久久嫩草精品久久久久| 久久激情五月激情| 欧美一区二区三区男人的天堂| 亚洲午夜在线| 亚洲一级黄色片| 亚洲永久免费av| 香蕉亚洲视频| 久久精品国产久精国产爱| 欧美在线视频在线播放完整版免费观看| 亚洲一区二区三区精品动漫| 亚洲中字在线| 香蕉久久国产| 久久夜色精品亚洲噜噜国产mv| 久久综合电影一区| 欧美风情在线| 国产精品白丝av嫩草影院| 国产日韩高清一区二区三区在线| 国产欧美日韩亚州综合| 国内外成人在线视频| 1204国产成人精品视频| 亚洲国产片色| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲一区欧美| 久久久久久久波多野高潮日日| 免费在线观看日韩欧美| 亚洲国产精品欧美一二99| 99re6热只有精品免费观看| 亚洲视频网站在线观看| 欧美在线国产精品| 欧美国产日韩一区二区三区| 欧美色精品天天在线观看视频| 国产日韩精品一区观看| 亚洲国产欧美一区二区三区同亚洲 | 久久久999精品免费| 欧美国产综合| 国产日韩1区| 亚洲欧洲在线观看| 亚洲欧美日韩直播| 免费亚洲电影在线| a4yy欧美一区二区三区| 久久av在线看| 欧美日韩一区在线观看| 国产一区二区电影在线观看| 99re66热这里只有精品3直播| 欧美在线免费观看视频| 亚洲第一区色| 欧美一区不卡| 欧美香蕉大胸在线视频观看| 亚洲高清不卡在线| 欧美亚洲一区| 亚洲精品影视| 免费影视亚洲| 一区二区三区在线观看视频| 亚洲一区二区av电影| 欧美国产综合| 久久av一区二区三区|