2013-03-05 39 views
-2

我在编辑这个问题b'coz我不允许添加新的问题。C循环:印度印度地图

我发现这个程序做的真棒印刷,但不明白它是如何工作的。请帮我理解它背后的逻辑。

#include <stdio.h> 
int main() 
{ 
    int a,b,c; 
    int count = 1; 
    for (b=c=10; a="- FIGURE?, UMKC,XYZHello Folks,\ 
        TFy!QJu ROo TNn(ROo)SLq SLq ULo+\ 
        UHs UJq TNn*RPn/QPbEWS_JSWQAIJO^\ 
        NBELPeHBFHT}TnALVlBLOFAkHFOuFETp\ 
        HCStHAUFAgcEAelclcn^r^r\\tZvYxXy\ 
        T|S~Pn SPm SOn TNn ULo0ULo#ULo-W\ 
        Hq!WFs XDt!" [b++ +21];) 
     for(; a-- > 64 ;) 
       putchar ((++c == 'Z') ? c = c /9 : 33^b&1); 
    return 0; 
} 

输出截图是

enter image description here

+1

你在你的消息循环使用的TranslateMessage()? – 2013-03-05 10:14:40

+0

是的,先生,我的消息循环是:(!TranslateAccelerator(msg.hwnd,hAccelTable,与MSG)) 一段时间(的GetMessage(味精,NULL,0,0)){ 如果{ 的TranslateMessage(&msg); 在DispatchMessage(&msg); } 。 } – null 2013-03-05 10:22:11

+1

很多在这里奇怪的事情。首先,你应该永远需要转换函数指针;如果你这样做,编译器是想告诉你的是,函数签名是不正确所以这个代码是错误的:'的reinterpret_cast (DLGPROC )'。其次,没有必要将焦点设置到对话框响应'WM_INITDIALOG'消息。这已经为你做。 – 2013-03-12 12:17:59

回答

1

Tab键通常由对话管理器,因为它是用来将焦点从一个控件到另一个(即IsDialogMessage呼叫转移吞噬了DialogBox函数调用作为其内部消息循环的一部分将过滤出Tab键并且不让它进入对话过程)。

有几种方法我可以想到你可以解决这个问题,但是我建议你应该选择另一个键来打开/关闭对话框,因为tab已经有一个众所周知的和明确定义的在Windows中的含义。

+0

没有钥匙回应先生。我已经尝试过了。 – null 2013-03-05 10:25:35

0

请仔细阅读它指出在MSDN的“的EndDialog”描述:

的EndDialog并不立即销毁对话框。相反,它会设置一个标志并允许对话框过程将控制权返回给系统。在尝试从应用程序队列中检索下一条消息之前,系统检查标志。如果该标志被设置,则系统结束消息循环,破坏了对话框,并且使用在nResult值作为从创建对话框中的函数返回值。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms645472%28v=vs.85%29.aspx

+0

这与这个问题有什么关系? – 2013-03-12 12:18:29