The technical difference is that 中文 is the standard formal way of expressing one's thoughts in 漢語 to everyone in Chinese, regardless if you are from Canton, Hong Kong, Singapore or from Beijing. This means that usage of slang, regional words etc are frowned upon. 漢語 is the "standard" normal version peculiar to a certain region in proper China. In the old days, Classical Chinese (文言文) is 中文 which was also understood in Japan, Korea and Vietnam. It was the lingua franca of the Far East. 中文 can be translated as the language of China. 漢文 is the language used by the Han Chinese. Hence, Manchurian or other minority languages are not considered as 漢文. 華語 is just a political term for correctness in regions like Malaysia, Singapore or Indonesia so as not to rile the native languages as 國語 (national language) in these regions are not Chinese but in Taiwan and in HK before the handover. This is why 普通話 is used to denote Mandarin Chinese as the "common language" of China. As an example, 我们 vs 咱们 or 甚麼 vs 啥.